{"record":{"id":"dfc38bc06e51eb1a","repo":"apache/seatunnel","slug":"please-configure-table-not-allow-null-table-in","errorCode":null,"errorMessage":"Please configure `table`, not allow null table in config.","messagePattern":"Please configure `table`, not allow null table in config\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/config/DorisTableConfig.java","lineNumber":127,"sourceCode":"            List<String> tableIds =\n                    tableList.stream()\n                            .map(DorisTableConfig::getTableIdentifier)\n                            .collect(Collectors.toList());\n            Set<String> tableIdSet = new HashSet<>(tableIds);\n            if (tableIdSet.size() < tableList.size() - 1) {\n                throw new IllegalArgumentException(\n                        \"Please configure unique `database`.`table`, not allow null/duplicate: \"\n                                + tableIds);\n            }\n        }\n\n        for (DorisTableConfig dorisTableConfig : tableList) {\n            if (StringUtils.isBlank(dorisTableConfig.getDatabase())) {\n                throw new IllegalArgumentException(\n                        \"Please configure `database`, not allow null database in config.\");\n            }\n            if (StringUtils.isBlank(dorisTableConfig.getTable())) {\n                throw new IllegalArgumentException(\n                        \"Please configure `table`, not allow null table in config.\");\n            }\n            if (dorisTableConfig.getBatchSize() <= 0) {\n                dorisTableConfig.setBatchSize(DORIS_BATCH_SIZE.defaultValue());\n            }\n            if (dorisTableConfig.getExecMemLimit() <= 0) {\n                dorisTableConfig.setExecMemLimit(DORIS_EXEC_MEM_LIMIT.defaultValue());\n            }\n            if (dorisTableConfig.getTabletSize() <= 0) {\n                dorisTableConfig.setTabletSize(DORIS_TABLET_SIZE.defaultValue());\n            }\n        }\n        return tableList;\n    }\n\n    public String getTableIdentifier() {\n        return String.format(\"%s.%s\", database, table);\n    }","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/config/DorisTableConfig.java#L109-L145","documentation":"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.","triggerScenarios":"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.","commonSituations":"Config generated by template where ${table} was not substituted; only `database` set intending whole-db sync without the required table entries; truncated config files.","solutions":["Add a non-empty `table` field to each table-list entry","If template placeholders are used, ensure variable substitution actually ran (check for literal '${table}' in the resolved config)","For whole-database sync, use the supported pattern-matching/database-sync options rather than a blank table"],"exampleFix":"// before\ntable-list = [{database = \"sales\", table = \"\"}]\n// after\ntable-list = [{database = \"sales\", table = \"orders\"}]","handlingStrategy":"validation","validationCode":"if (StringUtils.isBlank(tableConfig.getString(\"table\"))) {\n    throw new IllegalArgumentException(\"Each table-list entry requires a non-blank 'table'\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    DorisTableConfig.of(dorisConfig, options);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"Please configure `table`\")) {\n        LOG.error(\"Add missing 'table' field to every table-list entry\");\n    }\n    throw e;\n}","preventionTips":["Never leave 'table' blank; use pattern-matching options for multi-table sync","Verify template placeholders (${table}) are substituted in generated configs","Lint the resolved config before job submission"],"tags":["config-validation","doris","missing-field"],"backgroundTag":"missing-required-config-field","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}