{"record":{"id":"6179773aca125d1b","repo":"apache/seatunnel","slug":"please-configure-unique-database-table-not-al","errorCode":null,"errorMessage":"Please configure unique `database`.`table`, not allow null/duplicate: {tableIds}","messagePattern":"Please configure unique `database`\\.`table`, not allow null/duplicate: (.+?)","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":115,"sourceCode":"                            .table(connectorConfig.get(TABLE))\n                            .database(connectorConfig.get(DATABASE))\n                            .readField(connectorConfig.get(DORIS_READ_FIELD))\n                            .filterQuery(connectorConfig.get(DORIS_FILTER_QUERY))\n                            .batchSize(connectorConfig.get(DORIS_BATCH_SIZE))\n                            .tabletSize(connectorConfig.get(DORIS_TABLET_SIZE))\n                            .execMemLimit(connectorConfig.get(DORIS_EXEC_MEM_LIMIT))\n                            .build();\n            tableList = Collections.singletonList(tableProperty);\n        }\n\n        if (tableList.size() > 1) {\n            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) {","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/config/DorisTableConfig.java#L97-L133","documentation":"DorisTableConfig.of validates that the list of table configurations yields unique, non-null `database`.`table` identifiers. Note the check compares tableIdSet.size() < tableList.size() - 1, an off-by-one-style guard intended to catch duplicates (and null ids collapsing in the set). When violated it throws IllegalArgumentException listing the tableIds.","triggerScenarios":"Calling DorisTableConfig.of(...) where two configured tables resolve to the same `database`.`table` identifier (e.g. duplicate entries in table list, or same table configured with different options), or an identifier is null causing set collapse.","commonSituations":"Multi-table sink config with a repeated database.table entry; YAML/HOCON array duplication; merge of configs where the same table appears in multiple sources.","solutions":["Remove duplicate `database`.`table` entries so every configured table is unique","Merge per-table options (batch-size, exec-mem-limit) into a single entry for the duplicated table","Log/print the table list in your config and verify uniqueness before submission"],"exampleFix":"// before\ntable-list = [{database = \"db\", table = \"t\"}, {database = \"db\", table = \"t\"}]\n// after\ntable-list = [{database = \"db\", table = \"t\"}]","handlingStrategy":"validation","validationCode":"List<String> ids = tableList.stream()\n        .map(t -> t.getDatabase() + \".\" + t.getTable())\n        .collect(Collectors.toList());\nif (new HashSet<>(ids).size() != ids.size()) {\n    throw new IllegalArgumentException(\"Duplicate database.table entries: \" + ids);\n}","typeGuard":null,"tryCatchPattern":"try {\n    DorisTableConfig.of(dorisConfig, options);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Please configure unique\")) {\n        LOG.error(\"De-duplicate table-list entries in config: {}\", e.getMessage());\n    }\n    throw e;\n}","preventionTips":["Keep one entry per `database`.`table`; merge options instead of duplicating entries","Generate table-list from a single source of truth","Validate uniqueness in CI before submitting jobs"],"tags":["config-validation","doris","duplicate"],"backgroundTag":"schema-validation-failed","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"}