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

  1. Add a non-empty `table` field to each table-list entry
  2. If template placeholders are used, ensure variable substitution actually ran (check for literal '${table}' in the resolved config)
  3. 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

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


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