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

  1. Remove the unsupported key from table_options.
  2. Use only supported keys, currently tablespace and fillfactor, spelled exactly as listed in the error message.
  3. 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

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


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/d78569d960fb6d2b. Report an issue: GitHub.