{"record":{"id":"fb3556eeba58cc59","repo":"apache/seatunnel","slug":"please-configure-table-name-not-allow-null-tabl","errorCode":null,"errorMessage":"Please configure `table_name`, not allow null table name in config.","messagePattern":"Please configure `table_name`, not allow null table name in config\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-hudi/src/main/java/org/apache/seatunnel/connectors/seatunnel/hudi/config/HudiTableConfig.java","lineNumber":161,"sourceCode":"                            .maxCommitsToKeep(connectorConfig.get(MAX_COMMITS_TO_KEEP))\n                            .cdcEnabled(connectorConfig.get(CDC_ENABLED))\n                            .build();\n            tableList = Collections.singletonList(hudiTableConfig);\n        }\n        if (tableList.size() > 1) {\n            Set<String> tableNameSet =\n                    tableList.stream()\n                            .map(HudiTableConfig::getTableName)\n                            .collect(Collectors.toSet());\n            if (tableNameSet.size() < tableList.size() - 1) {\n                throw new IllegalArgumentException(\n                        \"Please configure unique `table_name`, not allow null/duplicate table name: \"\n                                + tableNameSet);\n            }\n        }\n        for (HudiTableConfig hudiTableConfig : tableList) {\n            if (Objects.isNull(hudiTableConfig.getTableName())) {\n                throw new IllegalArgumentException(\n                        \"Please configure `table_name`, not allow null table name in config.\");\n            }\n            if (Objects.isNull(hudiTableConfig.getDatabase())) {\n                log.info(\n                        \"The hudi table '{}' not set database, will uses 'default' as its database.\",\n                        hudiTableConfig.getTableName());\n                hudiTableConfig.setDatabase(DATABASE.defaultValue());\n            }\n            if (Objects.isNull(hudiTableConfig.getTableType())) {\n                log.info(\n                        \"The hudi table '{}' not set table type, default uses 'COPY_ON_WRITE'.\",\n                        hudiTableConfig.getTableName());\n                hudiTableConfig.setTableType(HoodieTableType.COPY_ON_WRITE);\n            }\n            if (Objects.isNull(hudiTableConfig.getIndexType())\n                    && Objects.isNull(hudiTableConfig.getIndexClassName())) {\n                hudiTableConfig.setIndexType(HoodieIndex.IndexType.BLOOM);\n                log.info(","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-hudi/src/main/java/org/apache/seatunnel/connectors/seatunnel/hudi/config/HudiTableConfig.java#L143-L179","documentation":"HudiTableConfig.of() requires every configured Hudi table entry to define a `table_name`. If any entry's table_name is null after config parsing, an IllegalArgumentException with this message is thrown. The table_name is mandatory for locating the Hudi table and routing records.","triggerScenarios":"A table entry in the Hudi sink's table_list omits the `table_name` option, so HudiTableConfig.getTableName() returns null during of() validation.","commonSituations":"Users configure only `table_path` or `database` and assume table_name is inferred; minimal copy-pasted configs missing the required field; option name typo (e.g. `tablename`).","solutions":["Add the required `table_name` option to every entry in the table_list configuration.","Check for typos in the option key (must be exactly `table_name`).","If you intended to configure a whole database via path, still supply table_name per table entry as required."],"exampleFix":"// before\n{\n  table_path = \"/warehouse/hudi/orders\"\n}\n\n// after\n{\n  table_name = \"orders\",\n  table_path = \"/warehouse/hudi/orders\"\n}","handlingStrategy":"validation","validationCode":"tableList.forEach(t -> {\n    if (t.getTableName() == null || t.getTableName().isEmpty())\n        throw new IllegalArgumentException(\"table_name is required for every table entry\");\n});","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always specify `table_name` in each Hudi table entry.","Check option key spelling — `table_name`, not `tablename`.","Validate configs with a schema check before job submission."],"tags":["hudi","config","missing-option","validation"],"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-14T05:17:10.506Z"}