apache/seatunnel · error · OptionValidationException

${e.message}

Error message

${e.message}

What it means

PaimonTableOptionsConditionExtension.evaluate validates the sink's table_options via PaimonTableOptionsValidator; if validation raises a SeaTunnelRuntimeException, it is re-thrown as an OptionValidationException carrying the original message. The displayed message is thus whatever the validator produced (e.g. blank key or null value in table_options).

Source

Thrown at seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/PaimonTableOptionsConditionExtension.java:57

    @Override
    public String description() {
        return "must use non-blank keys and non-null values; applied only to SaveMode auto-create"
                + " schema options (not merged into runtime paimon.table.write-props; see Paimon"
                + " connector docs)";
    }

    @Override
    public boolean evaluate(ReadonlyConfig config, Map<String, String> value)
            throws OptionValidationException {
        if (value == null || value.isEmpty()) {
            return true;
        }
        try {
            PaimonTableOptionsValidator.validate(config, value);
            return true;
        } catch (SeaTunnelRuntimeException e) {
            throw new OptionValidationException(e.getMessage());
        }
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Fix the offending table_options entry identified in the wrapped message (remove blank keys, supply values)
  2. Validate table_options keys/values before submission
  3. Consult PaimonTableOptionsValidator rules for required companion options (e.g. timestamp start/end modes)

Example fix

// before
table_options = { "" = "x" }
// after
table_options = { "bucket" = "2" }
Defensive patterns

Strategy: try-catch

Validate before calling

for (Map.Entry<String,String> e : tableOptions.entrySet()) { if (e.getKey() == null || e.getKey().isBlank() || e.getValue() == null) { throw new IllegalArgumentException("Invalid table_options entry: " + e); } }

Try / catch

try { ext.evaluate(config, value); } catch (OptionValidationException ex) { log.error("table_options validation failed: {}", ex.getMessage()); /* fix config and resubmit */ }

Prevention

When it happens

Trigger: Calling evaluate() during option/condition processing with a table_options map that fails PaimonTableOptionsValidator — blank property key, null value, or an invalid timestamp/offset configuration.

Common situations: Copy-pasted table_options with an empty key (`"" = "value"`); YAML/HOCON parsing producing null values; invalid `scan.timestamp-millis` style options rejected by the validator.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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