apache/seatunnel · error · IllegalArgumentException
Please configure `table`, not allow null table in config.
Error message
Please configure `table`, not allow null table in config.
What it means
DorisTableConfig.of requires every table configuration to have a non-blank `table` value; when getTable() is null/empty/whitespace it throws IllegalArgumentException. Along with `database`, this enforces a fully qualified target table for the Doris sink.
Source
Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/config/DorisTableConfig.java:127
List<String> tableIds =
tableList.stream()
.map(DorisTableConfig::getTableIdentifier)
.collect(Collectors.toList());
Set<String> tableIdSet = new HashSet<>(tableIds);
if (tableIdSet.size() < tableList.size() - 1) {
throw new IllegalArgumentException(
"Please configure unique `database`.`table`, not allow null/duplicate: "
+ tableIds);
}
}
for (DorisTableConfig dorisTableConfig : tableList) {
if (StringUtils.isBlank(dorisTableConfig.getDatabase())) {
throw new IllegalArgumentException(
"Please configure `database`, not allow null database in config.");
}
if (StringUtils.isBlank(dorisTableConfig.getTable())) {
throw new IllegalArgumentException(
"Please configure `table`, not allow null table in config.");
}
if (dorisTableConfig.getBatchSize() <= 0) {
dorisTableConfig.setBatchSize(DORIS_BATCH_SIZE.defaultValue());
}
if (dorisTableConfig.getExecMemLimit() <= 0) {
dorisTableConfig.setExecMemLimit(DORIS_EXEC_MEM_LIMIT.defaultValue());
}
if (dorisTableConfig.getTabletSize() <= 0) {
dorisTableConfig.setTabletSize(DORIS_TABLET_SIZE.defaultValue());
}
}
return tableList;
}
public String getTableIdentifier() {
return String.format("%s.%s", database, table);
}View on GitHub (pinned to cf67b549a7)
Solutions
- Add a non-empty `table` field to each table-list entry
- If template placeholders are used, ensure variable substitution actually ran (check for literal '${table}' in the resolved config)
- For whole-database sync, use the supported pattern-matching/database-sync options rather than a blank table
Example fix
// before
table-list = [{database = "sales", table = ""}]
// after
table-list = [{database = "sales", table = "orders"}] Defensive patterns
Strategy: validation
Validate before calling
if (StringUtils.isBlank(tableConfig.getString("table"))) {
throw new IllegalArgumentException("Each table-list entry requires a non-blank 'table'");
} Try / catch
try {
DorisTableConfig.of(dorisConfig, options);
} catch (IllegalArgumentException e) {
if (e.getMessage().contains("Please configure `table`")) {
LOG.error("Add missing 'table' field to every table-list entry");
}
throw e;
} Prevention
- Never leave 'table' blank; use pattern-matching options for multi-table sync
- Verify template placeholders (${table}) are substituted in generated configs
- Lint the resolved config before job submission
When it happens
Trigger: Calling DorisTableConfig.of(...) with an entry like {database = "db"} missing `table`, or with table = "" / whitespace; also patterns relying on table-name placeholders that failed to resolve.
Common situations: Config generated by template where ${table} was not substituted; only `database` set intending whole-db sync without the required table entries; truncated config files.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- Please configure `database`, not allow null database in conf
- CONFIG_VALIDATION_FAILED
- Please configure unique `database`.`table`, not allow null/d
- CONFIG_VALIDATION_FAILED
- port must be positive
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/dfc38bc06e51eb1a.
Report an issue: GitHub.