apache/seatunnel · error · IllegalArgumentException

Please configure `database`, not allow null database in conf

Error message

Please configure `database`, not allow null database in config.

What it means

DorisTableConfig.of requires every table configuration to have a non-blank `database` value; when getDatabase() is null/empty/whitespace it throws IllegalArgumentException. The Doris sink needs a fully qualified `database`.`table` target.

Source

Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/config/DorisTableConfig.java:123

            tableList = Collections.singletonList(tableProperty);
        }

        if (tableList.size() > 1) {
            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;
    }

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Add a non-empty `database` field to each entry in the table list
  2. If a single database applies to many tables, still ensure each entry (or the shared config the builder reads) carries the database name
  3. Check config key spelling/casing (`database`) in your HOCON/YAML

Example fix

// before
table-list = [{table = "orders"}]
// after
table-list = [{database = "sales", table = "orders"}]
Defensive patterns

Strategy: validation

Validate before calling

if (StringUtils.isBlank(tableConfig.getString("database"))) {
    throw new IllegalArgumentException("Each table-list entry requires a non-blank 'database'");
}

Try / catch

try {
    DorisTableConfig.of(dorisConfig, options);
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("Please configure `database`")) {
        LOG.error("Add missing 'database' field to every table-list entry");
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling DorisTableConfig.of(...) with a table entry that omits `database` or sets it to "" or whitespace, e.g. only {table = "t"}.

Common situations: Whole-database sync configs where the user assumes database is inherited from another option but the table entry itself lacks it; typos like `databases` or nested key misplacement in the config file.

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/faf537fcb531d8bd. Report an issue: GitHub.