This is an automated email from the ASF dual-hosted git repository.
corgy pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new af6e262b19 [Improve][Connector-V2][Hive] Deduplicate Hive option
definitions (#10251)
af6e262b19 is described below
commit af6e262b191887886aadbfc341b18fb6f5384d9c
Author: yzeng1618 <[email protected]>
AuthorDate: Mon Jan 5 14:28:04 2026 +0800
[Improve][Connector-V2][Hive] Deduplicate Hive option definitions (#10251)
---
.../seatunnel/hive/config/HiveConfig.java | 9 +++++++
.../seatunnel/hive/config/HiveOptions.java | 28 ++++------------------
.../seatunnel/hive/sink/HiveSaveModeHandler.java | 4 ++--
.../connectors/seatunnel/hive/sink/HiveSink.java | 5 ++--
.../seatunnel/hive/sink/HiveSinkOptions.java | 7 ++----
.../seatunnel/hive/utils/HiveMetaStoreCatalog.java | 3 +--
.../seatunnel/hive/utils/HiveTableUtils.java | 4 ++--
7 files changed, 24 insertions(+), 36 deletions(-)
diff --git
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveConfig.java
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveConfig.java
index 714be58619..e2a90903b4 100644
---
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveConfig.java
+++
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveConfig.java
@@ -23,12 +23,21 @@ import org.apache.seatunnel.api.configuration.Options;
import java.util.HashMap;
import java.util.Map;
+/** Hive connector options (single source of truth). */
public class HiveConfig {
public static final Option<String> TABLE_NAME =
Options.key("table_name")
.stringType()
.noDefaultValue()
.withDescription("Hive table name");
+
+ public static final Option<Boolean> USE_REGEX =
+ Options.key("use_regex")
+ .booleanType()
+ .defaultValue(false)
+ .withDescription(
+ "Use regular expression for `table_name` matching.
"
+ + "When set to true, the `table_name` will
be treated as a regex pattern and can match multiple tables.");
public static final Option<String> METASTORE_URI =
Options.key("metastore_uri")
.stringType()
diff --git
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveOptions.java
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveOptions.java
index 66027da7a6..744824f7d7 100644
---
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveOptions.java
+++
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/config/HiveOptions.java
@@ -18,34 +18,16 @@
package org.apache.seatunnel.connectors.seatunnel.hive.config;
import org.apache.seatunnel.api.configuration.Option;
-import org.apache.seatunnel.api.configuration.Options;
import
org.apache.seatunnel.connectors.seatunnel.file.config.FileBaseSourceOptions;
+/** Compatibility layer for Hive options and inherited file source options. */
public class HiveOptions extends FileBaseSourceOptions {
- public static final Option<String> TABLE_NAME =
- Options.key("table_name")
- .stringType()
- .noDefaultValue()
- .withDescription("Hive table name");
+ public static final Option<String> TABLE_NAME = HiveConfig.TABLE_NAME;
- public static final Option<Boolean> USE_REGEX =
- Options.key("use_regex")
- .booleanType()
- .defaultValue(false)
- .withDescription(
- "Use regular expression for `table_name` matching.
"
- + "When set to true, the `table_name` will
be treated as a regex pattern and can match multiple tables.");
+ public static final Option<String> METASTORE_URI =
HiveConfig.METASTORE_URI;
- public static final Option<String> METASTORE_URI =
- Options.key("metastore_uri")
- .stringType()
- .noDefaultValue()
- .withDescription("Hive metastore uri");
+ public static final Option<Boolean> USE_REGEX = HiveConfig.USE_REGEX;
- public static final Option<String> HIVE_SITE_PATH =
- Options.key("hive_site_path")
- .stringType()
- .noDefaultValue()
- .withDescription("The path of hive-site.xml");
+ public static final Option<String> HIVE_SITE_PATH =
HiveConfig.HIVE_SITE_PATH;
}
diff --git
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSaveModeHandler.java
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSaveModeHandler.java
index dc56f46c31..d95540809c 100644
---
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSaveModeHandler.java
+++
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSaveModeHandler.java
@@ -25,7 +25,7 @@ import org.apache.seatunnel.api.table.catalog.Catalog;
import org.apache.seatunnel.api.table.catalog.CatalogTable;
import org.apache.seatunnel.api.table.catalog.TablePath;
import org.apache.seatunnel.api.table.catalog.TableSchema;
-import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveOptions;
+import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveConfig;
import
org.apache.seatunnel.connectors.seatunnel.hive.exception.HiveConnectorErrorCode;
import
org.apache.seatunnel.connectors.seatunnel.hive.exception.HiveConnectorException;
import
org.apache.seatunnel.connectors.seatunnel.hive.utils.HiveMetaStoreCatalog;
@@ -62,7 +62,7 @@ public class HiveSaveModeHandler implements SaveModeHandler,
AutoCloseable {
this.readonlyConfig = readonlyConfig;
this.catalogTable = catalogTable;
this.schemaSaveMode = schemaSaveMode;
- this.tablePath =
TablePath.of(readonlyConfig.get(HiveOptions.TABLE_NAME));
+ this.tablePath =
TablePath.of(readonlyConfig.get(HiveConfig.TABLE_NAME));
this.dbName = tablePath.getDatabaseName();
this.tableName = tablePath.getTableName();
this.tableSchema = catalogTable.getTableSchema();
diff --git
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSink.java
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSink.java
index d3dccee936..d693e98c9b 100644
---
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSink.java
+++
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSink.java
@@ -43,6 +43,7 @@ import
org.apache.seatunnel.connectors.seatunnel.file.sink.state.FileSinkState;
import
org.apache.seatunnel.connectors.seatunnel.file.sink.writer.WriteStrategy;
import
org.apache.seatunnel.connectors.seatunnel.file.sink.writer.WriteStrategyFactory;
import
org.apache.seatunnel.connectors.seatunnel.hive.commit.HiveSinkAggregatedCommitter;
+import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveConfig;
import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveConstants;
import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveOptions;
import
org.apache.seatunnel.connectors.seatunnel.hive.exception.HiveConnectorException;
@@ -237,7 +238,7 @@ public class HiveSink
tableName = getTableInformation().getTableName();
} else {
// Derive from config to ensure non-null values during commit
- String table = readonlyConfig.get(HiveOptions.TABLE_NAME);
+ String table = readonlyConfig.get(HiveConfig.TABLE_NAME);
org.apache.seatunnel.api.table.catalog.TablePath path =
org.apache.seatunnel.api.table.catalog.TablePath.of(table);
dbName = path.getDatabaseName();
@@ -310,7 +311,7 @@ public class HiveSink
// Try to read from configuration, qualify default location via
HiveLocationUtils
private String getDefaultTableLocation(ReadonlyConfig config) {
try {
- String table = config.get(HiveOptions.TABLE_NAME);
+ String table = config.get(HiveConfig.TABLE_NAME);
org.apache.seatunnel.api.table.catalog.TablePath path =
org.apache.seatunnel.api.table.catalog.TablePath.of(table);
return
org.apache.seatunnel.connectors.seatunnel.hive.utils.HiveLocationUtils
diff --git
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSinkOptions.java
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSinkOptions.java
index 9d7b81fac5..e6bad0e3fa 100644
---
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSinkOptions.java
+++
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/sink/HiveSinkOptions.java
@@ -21,16 +21,13 @@ import org.apache.seatunnel.api.configuration.Option;
import org.apache.seatunnel.api.configuration.Options;
import org.apache.seatunnel.api.sink.DataSaveMode;
import org.apache.seatunnel.api.sink.SchemaSaveMode;
+import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveConfig;
import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveOptions;
public class HiveSinkOptions extends HiveOptions {
public static final Option<Boolean> ABORT_DROP_PARTITION_METADATA =
- Options.key("abort_drop_partition_metadata")
- .booleanType()
- .defaultValue(false)
- .withDescription(
- "Flag to decide whether to drop partition metadata
from Hive Metastore during an abort operation. Note: this only affects the
metadata in the metastore, the data in the partition will always be
deleted(data generated during the synchronization process).");
+ HiveConfig.ABORT_DROP_PARTITION_METADATA;
public static final Option<Boolean> OVERWRITE =
Options.key("overwrite")
diff --git
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveMetaStoreCatalog.java
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveMetaStoreCatalog.java
index 2d6778eca7..ab3cf36369 100644
---
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveMetaStoreCatalog.java
+++
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveMetaStoreCatalog.java
@@ -31,7 +31,6 @@ import
org.apache.seatunnel.api.table.catalog.exception.TableNotExistException;
import
org.apache.seatunnel.connectors.seatunnel.file.hadoop.HadoopLoginFactory;
import
org.apache.seatunnel.connectors.seatunnel.file.hdfs.source.config.HdfsSourceConfigOptions;
import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveConfig;
-import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveOptions;
import
org.apache.seatunnel.connectors.seatunnel.hive.exception.HiveConnectorErrorCode;
import
org.apache.seatunnel.connectors.seatunnel.hive.exception.HiveConnectorException;
@@ -87,7 +86,7 @@ public class HiveMetaStoreCatalog implements Catalog,
Closeable, Serializable {
private transient UserGroupInformation userGroupInformation;
public HiveMetaStoreCatalog(ReadonlyConfig config) {
- this.metastoreUri = config.get(HiveOptions.METASTORE_URI);
+ this.metastoreUri = config.get(HiveConfig.METASTORE_URI);
this.hadoopConfDir = config.get(HiveConfig.HADOOP_CONF_PATH);
this.hiveSitePath = config.get(HiveConfig.HIVE_SITE_PATH);
this.kerberosEnabled = HiveMetaStoreProxyUtils.enableKerberos(config);
diff --git
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveTableUtils.java
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveTableUtils.java
index b47fa06678..5544158f39 100644
---
a/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveTableUtils.java
+++
b/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/utils/HiveTableUtils.java
@@ -22,8 +22,8 @@ import org.apache.seatunnel.api.table.catalog.TablePath;
import org.apache.seatunnel.common.exception.CommonErrorCodeDeprecated;
import org.apache.seatunnel.common.exception.SeaTunnelRuntimeException;
import org.apache.seatunnel.connectors.seatunnel.file.config.FileFormat;
+import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveConfig;
import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveConstants;
-import org.apache.seatunnel.connectors.seatunnel.hive.config.HiveOptions;
import
org.apache.seatunnel.connectors.seatunnel.hive.exception.HiveConnectorErrorCode;
import
org.apache.seatunnel.connectors.seatunnel.hive.exception.HiveConnectorException;
@@ -32,7 +32,7 @@ import org.apache.hadoop.hive.metastore.api.Table;
public class HiveTableUtils {
public static Table getTableInfo(ReadonlyConfig readonlyConfig) {
- String table = readonlyConfig.get(HiveOptions.TABLE_NAME);
+ String table = readonlyConfig.get(HiveConfig.TABLE_NAME);
TablePath tablePath = TablePath.of(table);
if (tablePath.getDatabaseName() == null || tablePath.getTableName() ==
null) {
throw new SeaTunnelRuntimeException(