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

  1. Add the required `table_name` option to every entry in the table_list configuration.
  2. Check for typos in the option key (must be exactly `table_name`).
  3. 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

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


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