apache/seatunnel · error · HudiConnectorException

TABLE_CONFIG_NOT_FOUND

TABLE_CONFIG_NOT_FOUND

Error message

The corresponding table configuration is not found

What it means

When the Hudi sink is configured with multiple tables, HudiSinkFactory.getHudiTableConfig() looks up the HudiTableConfig entry whose table_name matches the requested table. If no entry matches, a HudiConnectorException with TABLE_CONFIG_NOT_FOUND is thrown. Every table being written must have a corresponding entry in the sink's table_list.

Source

Thrown at seatunnel-connectors-v2/connector-hudi/src/main/java/org/apache/seatunnel/connectors/seatunnel/hudi/sink/HudiSinkFactory.java:148

                        catalogTable.getCatalogName());
        // set record keys to options
        CatalogTable finalCatalogTable = catalogTable;
        return () ->
                new HudiSink(
                        context.getOptions(), hudiSinkConfig, hudiTableConfig, finalCatalogTable);
    }

    private HudiTableConfig getHudiTableConfig(HudiSinkConfig hudiSinkConfig, String tableName) {
        List<HudiTableConfig> tableList = hudiSinkConfig.getTableList();
        if (tableList.size() == 1) {
            return tableList.get(0);
        } else if (tableList.size() > 1) {
            Optional<HudiTableConfig> optionalHudiTableConfig =
                    tableList.stream()
                            .filter(table -> table.getTableName().equals(tableName))
                            .findFirst();
            if (!optionalHudiTableConfig.isPresent()) {
                throw new HudiConnectorException(
                        TABLE_CONFIG_NOT_FOUND,
                        "The corresponding table configuration is not found");
            }
            return optionalHudiTableConfig.get();
        }
        throw new HudiConnectorException(
                TABLE_CONFIG_NOT_FOUND, "The corresponding table configuration is not found");
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Add a table_list entry with `table_name` exactly matching the table being routed.
  2. Verify case sensitivity and exact spelling of the configured table_name versus the source table name.
  3. If using table path-based config, confirm which table_name it registers and align the sink routing accordingly.

Example fix

// before
table_list = [ { table_name = "orders", ... } ]
// runtime routes table "order_items"

// after
table_list = [
  { table_name = "orders", ... },
  { table_name = "order_items", ... }
]
Defensive patterns

Strategy: validation

Validate before calling

Set<String> configured = tableList.stream()
    .map(HudiTableConfig::getTableName)
    .collect(Collectors.toSet());
if (!configured.contains(tableName))
    throw new IllegalArgumentException("missing Hudi table config for: " + tableName);

Try / catch

try {
    sink.write(...);
} catch (HudiConnectorException e) {
    if (e.getCode() == HudiConnectorException.TABLE_CONFIG_NOT_FOUND) {
        // add/fix the table_list entry for the table
    } else throw e;
}

Prevention

When it happens

Trigger: Multi-table Hudi sink where the runtime requests a config for tableName not present in the configured table_list — e.g. the data's table name doesn't equal any configured `table_name`.

Common situations: Schema/table name mismatch between upstream (e.g. CDC source table name) and the configured table_name; case-sensitivity differences; adding a table to the source but forgetting to add it to the Hudi sink table_list.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


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