apache/seatunnel · error · JdbcConnectorException
CONFIG_VALIDATION_FAILED
CONFIG_VALIDATION_FAILED
Error message
Unsupported JDBC table_options for dialect '%s': %s. Supported keys: %s
What it means
KingbaseDialect.validateTableOptions rejects table_options keys that the Kingbase catalog cannot translate into CREATE TABLE DDL. Only a fixed set of keys (e.g. fillfactor, tablespace) is supported; anything else fails fast with CONFIG_VALIDATION_FAILED before the DDL is generated.
Source
Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/kingbase/KingbaseDialect.java:141
return "\"" + getFieldIde(identifier, fieldIde) + "\"";
}
@Override
public String quoteDatabaseIdentifier(String identifier) {
return "\"" + identifier + "\"";
}
@Override
public void validateTableOptions(Map<String, String> tableOptions) {
if (tableOptions == null || tableOptions.isEmpty()) {
return;
}
Set<String> unsupportedOptions = new LinkedHashSet<>(tableOptions.keySet());
unsupportedOptions.removeAll(SUPPORTED_TABLE_OPTIONS);
if (!unsupportedOptions.isEmpty()) {
throw new JdbcConnectorException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
String.format(
"Unsupported JDBC table_options for dialect '%s': %s. Supported keys: %s",
dialectName(),
String.join(", ", unsupportedOptions),
String.join(", ", SUPPORTED_TABLE_OPTIONS)));
}
for (Map.Entry<String, String> entry : tableOptions.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (StringUtils.isBlank(value)) {
throw new JdbcConnectorException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
String.format(
"Invalid JDBC table_options for dialect '%s': key '%s' must not be blank",
dialectName(), key));
}View on GitHub (pinned to cf67b549a7)
Solutions
- Remove the unsupported key from table_options.
- Use only supported keys, currently tablespace and fillfactor, spelled exactly as listed in the error message.
- If the option is genuinely needed, extend SUPPORTED_TABLE_OPTIONS and the DDL generation in KingbaseDialect/KingbaseCatalog.
Example fix
// before
table_options = {
engine = "InnoDB"
}
// after
table_options = {
fillfactor = "80"
tablespace = "my_ts"
} Defensive patterns
Strategy: validation
Validate before calling
Set<String> allowed = Set.of("fillfactor", "tablespace");
if (!tableOptions.keySet().stream().allMatch(allowed::contains)) {
throw new IllegalArgumentException("table_options keys must be within " + allowed);
} Prevention
- Keep table_options limited to fillfactor and tablespace for Kingbase.
- Avoid copying MySQL/Oracle option keys into Kingbase configs.
- Lint configs against a per-dialect allowed-key list in CI.
When it happens
Trigger: Sink config with a Kingbase catalog that defines table_options containing a key not in KingbaseDialect.SUPPORTED_TABLE_OPTIONS; validateTableOptions is called when the catalog builds the create-table SQL.
Common situations: Typos like 'fill_factore' or 'table_space'; copying MySQL table options (engine, charset) into a Kingbase config; case/key naming drift.
Understand the failure class
Background: Config validation failed: what "invalid value for {key}" and settings-rejection errors mean across 19 open-source libraries — this error's family across 19 libraries.
Related errors
- CONFIG_VALIDATION_FAILED
- CONFIG_VALIDATION_FAILED
- SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED
- SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED
- 查询数据库是否存在失败:
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/d78569d960fb6d2b.
Report an issue: GitHub.