apache/seatunnel · error · SeaTunnelRuntimeException
CONFIG_VALIDATION_FAILED
CONFIG_VALIDATION_FAILED
Error message
table_options contains a blank property key for Paimon sink.
What it means
PaimonTableOptionsValidator.validate checks the sink's table_options map for malformed entries. A blank (null/whitespace) property key causes a SeaTunnelRuntimeException with SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED and this message; a null value is likewise rejected.
Source
Thrown at seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/PaimonTableOptionsValidator.java:46
import java.util.Map;
/**
* Validates Paimon sink {@code table_options} before job submission.
*
* <p>Paimon accepts open CoreOptions keys; this validator only rejects blank keys or null values.
* Unsupported option keys fail later when Paimon creates the table.
*/
public final class PaimonTableOptionsValidator {
private PaimonTableOptionsValidator() {}
public static void validate(ReadonlyConfig config, Map<String, String> tableOptions) {
if (tableOptions == null || tableOptions.isEmpty()) {
return;
}
for (Map.Entry<String, String> entry : tableOptions.entrySet()) {
if (StringUtils.isBlank(entry.getKey())) {
throw new SeaTunnelRuntimeException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
"table_options contains a blank property key for Paimon sink.");
}
if (entry.getValue() == null) {
throw new SeaTunnelRuntimeException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
String.format(
"table_options property '%s' has null value for Paimon sink.",
entry.getKey()));
}
}
}
public static void validate(ReadonlyConfig config) {
validate(
config,
config.getOptional(SinkConnectorCommonOptions.TABLE_OPTIONS)
.orElse(Collections.emptyMap()));View on GitHub (pinned to cf67b549a7)
Solutions
- Remove or fix the blank-key entry in table_options in the job config
- Check for template variables that expand to empty strings and become keys
- Lint the HOCON/YAML config so keys are never empty
Example fix
// before
table_options {
"" = "some-value"
}
// after
table_options {
"bucket" = "2"
}
Defensive patterns
Strategy: validation
Validate before calling
if (tableOptions != null) { for (String k : tableOptions.keySet()) { if (k == null || k.isBlank()) { throw new IllegalArgumentException("table_options contains a blank key"); } } } Try / catch
try { PaimonTableOptionsValidator.validate(config, tableOptions); } catch (SeaTunnelRuntimeException e) { if (SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED.equals(e.getErrorCode())) { /* sanitize table_options and retry */ } else { throw e; } } Prevention
- Lint HOCON/YAML so keys are never empty strings
- Expand template variables before validation
- Fail fast on empty keys during config parsing
When it happens
Trigger: Calling validate(config, tableOptions) with a non-empty table_options map containing an entry whose key is blank — typically produced by malformed HOCON/YAML such as `"" : "value"` or a key consisting only of spaces.
Common situations: Hand-edited config with an empty key line; template/config generator emitting an empty key when a variable is unset; YAML indentation mistakes turning a key into an empty string.
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
- ${e.message}
- 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/0be3bf7461524e08.
Report an issue: GitHub.