apache/seatunnel · warning

The variable placeholder

Error message

The variable placeholder `${table_name}` has been marked as deprecated and will be removed soon, please use `${table}`

What it means

CatalogUtil.getCreateTableSql applies save-mode placeholders to a template SQL. The legacy `${table_name}` placeholder is deprecated in favor of `${table}`; when the template still contains the old placeholder, this warning is logged and the substitution still proceeds for backward compatibility.

Solutions

  1. Replace `${table_name}` with `${table}` in your create-table template
  2. Review connector docs for the current SaveModePlaceHolder list and update templates accordingly
  3. Test the save-mode template after upgrade so removal of the legacy placeholder doesn't break automation

Example fix

// before
save_mode_create_template = "CREATE TABLE IF NOT EXISTS ${database}.${table_name} (...)"
// after
save_mode_create_template = "CREATE TABLE IF NOT EXISTS ${database}.${table} (...)"
Defensive patterns

Strategy: validation

Validate before calling

// Before deploying, check your template
if (template.contains("${table_name}")) {
  throw new IllegalStateException("Template uses deprecated ${table_name}; use ${table}");
}

Prevention

When it happens

Trigger: A save-mode template (e.g. save_mode_create_template option) contains `${table_name}` instead of `${table}`; the code replaces it but warns that support will be removed.

Common situations: Templates copied from old SeaTunnel versions or older documentation; upgrades where user configs were not migrated to the new placeholder name.

Understand the failure class

Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/57c2e51424dd57c5. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-connectors-v2/connector-common/src/main/java/org/apache/seatunnel/connectors/seatunnel/common/util/CatalogUtil.java:102

                        SaveModePlaceHolder.ROWTYPE_UNIQUE_KEY.getReplacePlaceHolder(),
                        Matcher.quoteReplacement(uniqueKey));
        Map<String, CreateTableParser.ColumnInfo> columnInTemplate =
                CreateTableParser.getColumnList(template);
        template = mergeColumnInTemplate(columnInTemplate, tableSchema, template);

        String rowTypeFields =
                tableSchema.getColumns().stream()
                        .filter(column -> !columnInTemplate.containsKey(column.getName()))
                        .map(x -> columnToConnectorType(x))
                        .collect(Collectors.joining(",\n"));

        if (template.contains(SaveModePlaceHolder.TABLE_NAME.getPlaceHolder())) {
            // TODO: Remove this compatibility config
            template =
                    template.replaceAll(
                            SaveModePlaceHolder.TABLE_NAME.getReplacePlaceHolder(),
                            Matcher.quoteReplacement(table));
            log.warn(
                    "The variable placeholder `${table_name}` has been marked as deprecated and will be removed soon, please use `${table}`");
        }

        return template.replaceAll(
                        SaveModePlaceHolder.DATABASE.getReplacePlaceHolder(),
                        Matcher.quoteReplacement(database))
                .replaceAll(
                        SaveModePlaceHolder.TABLE.getReplacePlaceHolder(),
                        Matcher.quoteReplacement(table))
                .replaceAll(
                        SaveModePlaceHolder.ROWTYPE_FIELDS.getReplacePlaceHolder(),
                        Matcher.quoteReplacement(rowTypeFields))
                .replaceAll(
                        SaveModePlaceHolder.COMMENT.getReplacePlaceHolder(),
                        Matcher.quoteReplacement(
                                Objects.isNull(comment)
                                        ? ""
                                        : comment.replace("'", "''").replace("\\", "\\\\")));

View on GitHub (pinned to cf67b549a7)