apache/seatunnel · error · IllegalArgumentException
Please configure `table_name`, not allow null table name in
Error message
Please configure `table_name`, not allow null table name in config.
What it means
HudiTableConfig.of() requires every configured Hudi table entry to define a `table_name`. If any entry's table_name is null after config parsing, an IllegalArgumentException with this message is thrown. The table_name is mandatory for locating the Hudi table and routing records.
Source
Thrown at seatunnel-connectors-v2/connector-hudi/src/main/java/org/apache/seatunnel/connectors/seatunnel/hudi/config/HudiTableConfig.java:161
.maxCommitsToKeep(connectorConfig.get(MAX_COMMITS_TO_KEEP))
.cdcEnabled(connectorConfig.get(CDC_ENABLED))
.build();
tableList = Collections.singletonList(hudiTableConfig);
}
if (tableList.size() > 1) {
Set<String> tableNameSet =
tableList.stream()
.map(HudiTableConfig::getTableName)
.collect(Collectors.toSet());
if (tableNameSet.size() < tableList.size() - 1) {
throw new IllegalArgumentException(
"Please configure unique `table_name`, not allow null/duplicate table name: "
+ tableNameSet);
}
}
for (HudiTableConfig hudiTableConfig : tableList) {
if (Objects.isNull(hudiTableConfig.getTableName())) {
throw new IllegalArgumentException(
"Please configure `table_name`, not allow null table name in config.");
}
if (Objects.isNull(hudiTableConfig.getDatabase())) {
log.info(
"The hudi table '{}' not set database, will uses 'default' as its database.",
hudiTableConfig.getTableName());
hudiTableConfig.setDatabase(DATABASE.defaultValue());
}
if (Objects.isNull(hudiTableConfig.getTableType())) {
log.info(
"The hudi table '{}' not set table type, default uses 'COPY_ON_WRITE'.",
hudiTableConfig.getTableName());
hudiTableConfig.setTableType(HoodieTableType.COPY_ON_WRITE);
}
if (Objects.isNull(hudiTableConfig.getIndexType())
&& Objects.isNull(hudiTableConfig.getIndexClassName())) {
hudiTableConfig.setIndexType(HoodieIndex.IndexType.BLOOM);
log.info(View on GitHub (pinned to cf67b549a7)
Solutions
- Add the required `table_name` option to every entry in the table_list configuration.
- Check for typos in the option key (must be exactly `table_name`).
- If you intended to configure a whole database via path, still supply table_name per table entry as required.
Example fix
// before
{
table_path = "/warehouse/hudi/orders"
}
// after
{
table_name = "orders",
table_path = "/warehouse/hudi/orders"
} Defensive patterns
Strategy: validation
Validate before calling
tableList.forEach(t -> {
if (t.getTableName() == null || t.getTableName().isEmpty())
throw new IllegalArgumentException("table_name is required for every table entry");
}); Prevention
- Always specify `table_name` in each Hudi table entry.
- Check option key spelling — `table_name`, not `tablename`.
- Validate configs with a schema check before job submission.
When it happens
Trigger: A table entry in the Hudi sink's table_list omits the `table_name` option, so HudiTableConfig.getTableName() returns null during of() validation.
Common situations: Users configure only `table_path` or `database` and assume table_name is inferred; minimal copy-pasted configs missing the required field; option name typo (e.g. `tablename`).
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
- AzureCosmosDB requires uri, endpoint, or connection string t
- Please configure unique `table_name`, not allow null/duplica
- Schema config can not be empty
- Schema config need option [schema], please correct your conf
- Unknown format type:
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/fb3556eeba58cc59.
Report an issue: GitHub.