apache/seatunnel · warning
Column {} already exists in table {}. Skipping change column
Error message
Column {} already exists in table {}. Skipping change column operation. event: {} What it means
Databend's SchemaChangeManager handles AlterTableChangeColumnEvent schema changes. When the old column does not exist but the new column name already exists in the table, the change (rename/modify) is considered already applied or conflicting, so it is skipped with this warning instead of failing. The schema change is a no-op.
Source
Thrown at seatunnel-connectors-v2/connector-databend/src/main/java/org/apache/seatunnel/connectors/seatunnel/databend/schema/SchemaChangeManager.java:107
}
}
private void applySchemaChange(
Connection connection, TablePath tablePath, AlterTableColumnEvent event)
throws SQLException, IOException {
if (event instanceof AlterColumnCommentEvent) {
// Databend does not support comment synchronization, including nested column events.
log.info(
"Ignoring comment change event for table {} - Databend sink does not support comment sync: {}",
tablePath.getFullName(),
event.getClass().getSimpleName());
} else if (event instanceof AlterTableChangeColumnEvent) {
AlterTableChangeColumnEvent changeColumnEvent = (AlterTableChangeColumnEvent) event;
if (!changeColumnEvent.getOldColumn().equals(changeColumnEvent.getColumn().getName())) {
if (!columnExists(connection, tablePath, changeColumnEvent.getOldColumn())
&& columnExists(
connection, tablePath, changeColumnEvent.getColumn().getName())) {
log.warn(
"Column {} already exists in table {}. Skipping change column operation. event: {}",
changeColumnEvent.getColumn().getName(),
tablePath.getFullName(),
event);
return;
}
applyRenameColumn(connection, tablePath, changeColumnEvent);
}
} else if (event instanceof AlterTableModifyColumnEvent) {
applyModifyColumn(connection, tablePath, (AlterTableModifyColumnEvent) event);
} else if (event instanceof AlterTableAddColumnEvent) {
// handle column
AlterTableAddColumnEvent addColumnEvent = (AlterTableAddColumnEvent) event;
if (columnExists(connection, tablePath, addColumnEvent.getColumn().getName())) {
log.warn(
"Column {} already exists in table {}. Skipping add column operation. event: {}",
addColumnEvent.getColumn().getName(),
tablePath.getFullName(),View on GitHub (pinned to cf67b549a7)
Solutions
- No action needed — the desired schema state already exists; confirm the column definition matches expectations
- If it's a genuine conflict (different type/comment on the existing column), drop or alter the existing column manually and re-apply
- Ensure schema-change events are applied once per pipeline to avoid duplicate DDL
Example fix
// before (duplicate application) ALTER TABLE db.t RENAME COLUMN old TO new; -- run twice via replay // after — guard/skip when new column exists (connector does this automatically)
Defensive patterns
Strategy: retry
Validate before calling
// Pre-check target state before applying change
boolean oldExists = columnExists(conn, tablePath, oldName);
boolean newExists = columnExists(conn, tablePath, newName);
if (!oldExists && newExists) { /* already applied; skip */ } Prevention
- Design schema-change handling to be idempotent (check-then-apply)
- Deduplicate CDC DDL events upstream
- Manually reconcile column definitions when replay is detected
When it happens
Trigger: Applying a change-column event where target column name already exists and the source (old) column is gone — i.e., the rename was already performed (e.g. schema-change replay/at-least-once delivery, or two jobs applying the same CDC schema change).
Common situations: Replaying a CDC stream after a restart; multiple consumers applying the same DDL; manually renaming a column in Databend that the pipeline also renames.
Understand the failure class
Background: "already exists" / EEXIST / FileAlreadyExistsException: what the 'file already exists' error means and how to fix it — this error's family across 37 libraries.
Related errors
- Column {} already exists in table {}. Skipping add column op
- Column {} does not exist in table {}. Skipping drop column o
- SQL_OPERATION_FAILED
- Column {} already exists in table {}. Skipping change column
- Unsupported schemaChangeEvent: {event.getClass().getName()}
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/8687c68cd9ecade5.
Report an issue: GitHub.