{"record":{"id":"75b0083f79d08d7e","repo":"apache/seatunnel","slug":"the-variable-placeholder-table-name-has-been-75b008","errorCode":null,"errorMessage":"The variable placeholder `${table_name}` has been marked as deprecated and will be removed soon, please use `${table}`","messagePattern":"The variable placeholder `(.+?)` has been marked as deprecated and will be removed soon, please use `(.+?)`","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/util/DorisCatalogUtil.java","lineNumber":218,"sourceCode":"                template.replaceAll(\n                        SaveModePlaceHolder.ROWTYPE_DUPLICATE_KEY.getReplacePlaceHolder(), dupKey);\n        Map<String, CreateTableParser.ColumnInfo> columnInTemplate =\n                CreateTableParser.getColumnList(template);\n        template = mergeColumnInTemplate(columnInTemplate, tableSchema, template, typeConverter);\n\n        String rowTypeFields =\n                tableSchema.getColumns().stream()\n                        .filter(column -> !columnInTemplate.containsKey(column.getName()))\n                        .map(x -> DorisCatalogUtil.columnToDorisType(x, typeConverter))\n                        .collect(Collectors.joining(\",\\n\"));\n\n        if (template.contains(SaveModePlaceHolder.TABLE_NAME.getPlaceHolder())) {\n            // TODO: Remove this compatibility config\n            template =\n                    template.replaceAll(\n                            SaveModePlaceHolder.TABLE_NAME.getReplacePlaceHolder(),\n                            tablePath.getTableName());\n            log.warn(\n                    \"The variable placeholder `${table_name}` has been marked as deprecated and will be removed soon, please use `${table}`\");\n        }\n\n        return template.replaceAll(\n                        SaveModePlaceHolder.DATABASE.getReplacePlaceHolder(),\n                        tablePath.getDatabaseName())\n                .replaceAll(\n                        SaveModePlaceHolder.TABLE.getReplacePlaceHolder(), tablePath.getTableName())\n                .replaceAll(\n                        SaveModePlaceHolder.ROWTYPE_FIELDS.getReplacePlaceHolder(), rowTypeFields)\n                .replaceAll(\n                        SaveModePlaceHolder.COMMENT.getReplacePlaceHolder(),\n                        Objects.isNull(catalogTable.getComment())\n                                ? \"\"\n                                : catalogTable\n                                        .getComment()\n                                        .replace(\"'\", \"''\")\n                                        .replace(\"\\\\\", \"\\\\\\\\\"));","sourceCodeStart":200,"sourceCodeEnd":236,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/util/DorisCatalogUtil.java#L200-L236","documentation":"A WARN-level deprecation notice logged by DorisCatalogUtil.getCreateTableStatement when a table template still contains the `${table_name}` placeholder. SeaTunnel replaces it with the table name for backward compatibility, but the placeholder will be removed in a future release. Users must migrate to the `${table}` placeholder defined in SaveModePlaceHolder.","triggerScenarios":"Calling getCreateTableStatement (directly or via Doris catalog create-table flows) while the configured create-table template string contains the literal `${table_name}` placeholder.","commonSituations":"Old Doris sink/catalog configs written before `${table}` was introduced; copy-pasted templates from outdated blog posts or docs; templates stored in config files that survived version upgrades.","solutions":["Replace `${table_name}` with `${table}` in the template (e.g. in the Doris catalog/table configuration).","Search all config files (`sed -i 's/\\${table_name}/\\${table}/g'`) before upgrading to a release that removes the compatibility shim.","Re-test table creation after the change to confirm the generated DDL still resolves the table name correctly."],"exampleFix":"// before\ntemplate = \"CREATE TABLE IF NOT EXISTS ${database}.${table_name} (...)\";\n// after\ntemplate = \"CREATE TABLE IF NOT EXISTS ${database}.${table} (...)\";","handlingStrategy":"validation","validationCode":"if (template.contains(\"${table_name}\")) {\n    template = template.replace(\"${table_name}\", \"${table}\"); // migrate before it breaks\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use ${table} in all new Doris templates","Add a config lint step that greps for ${table_name}","Pin and review template strings during upgrades"],"tags":["deprecation","placeholder","doris","template"],"backgroundTag":"deprecated-api-usage","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}