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
While applying a schema-change (DDL) event like RenameColumn/ChangeColumn, the connector detected the target column name already exists in the StarRocks table while the old column does not. It logs this warning and skips the operation, treating the change as already applied (idempotent replay).
Source
Thrown at seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/util/SchemaUtils.java:78
public static void applySchemaChange(
SchemaChangeEvent event, Connection connection, TablePath tablePath)
throws SQLException {
if (event instanceof AlterTableColumnsEvent) {
for (AlterTableColumnEvent columnEvent : ((AlterTableColumnsEvent) event).getEvents()) {
applySchemaChange(columnEvent, connection, tablePath);
}
} 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;
}
}
applySchemaChange(connection, tablePath, changeColumnEvent);
} else if (event instanceof AlterTableModifyColumnEvent) {
applySchemaChange(connection, tablePath, (AlterTableModifyColumnEvent) event);
} else if (event instanceof AlterTableAddColumnEvent) {
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(),
event);View on GitHub (pinned to cf67b549a7)
Solutions
- No action needed if the schema is already correct — the operation is safely skipped
- If the skip is unexpected, compare target table schema (DESC table) with the event and reconcile manually
- Ensure checkpoints/restore state are consistent so the same DDL event isn't repeatedly replayed
Defensive patterns
Strategy: fallback
Validate before calling
// before applying, check target state yourself SHOW COLUMNS FROM <table> LIKE '<newColumn>';
Try / catch
try {
schemaChangeHandler.applySchemaChange(event);
} catch (Exception e) {
// skipped-due-to-existing-column is a benign warning; only retry on real failures
if (!e.getMessage().contains("already exists")) throw e;
} Prevention
- Make DDL handlers idempotent and treat 'already exists' skips as success
- Avoid manual ALTERs on tables managed by CDC schema evolution
- Restore jobs from consistent checkpoints to prevent DDL replay loops
When it happens
Trigger: applySchemaChange receives a change-column event whose new column already exists in the target table and the old column no longer does — typically the event was applied in a previous run and is being replayed.
Common situations: CDC job restarted from an earlier checkpoint; schema changes applied manually to StarRocks before the job; multiple jobs applying overlapping DDL.
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
- Unsupported schemaChangeEvent : " + event.getEventType()
- Column {} already exists in table {}. Skipping change column
- Column {} already exists in table {}. Skipping add column op
- Column {} does not exist in table {}. Skipping drop column o
- Column {} already exists in table {}. Skipping add column op
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/fcb999b280a9f2d5.
Report an issue: GitHub.