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
- Replace `${table_name}` with `${table}` in your create-table template
- Review connector docs for the current SaveModePlaceHolder list and update templates accordingly
- 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
- Grep your SeaTunnel configs for ${table_name} before upgrades
- Use only current SaveModePlaceHolder names from docs
- Add a config lint step in CI for save-mode templates
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
- Both 'mappings' and 'schema_config' are present…
- COMMON-24
- CONFIG_VALIDATION_FAILED
- Option 'ignored_fields' is deprecated. Use 'properties'…
- Option 'selected_fields' is deprecated. Use 'properties'…
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)