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
- Fix the offending table_options entry identified in the wrapped message (remove blank keys, supply values)
- Validate table_options keys/values before submission
- 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
- Reject blank keys/values at config-load time
- Keep table_options keys explicit in templates
- Read the wrapped validator message for the exact offending option
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
- NON_PRIMARY_KEY_CHECK_ERROR
- CONFIG_VALIDATION_FAILED
- Schema config can not be empty
- Unknown format type:
- Option '${option}' cannot be blank
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/d72069719a589a0c.
Report an issue: GitHub.