apache/seatunnel · info
Column {} does not exist in table {}. Skipping drop column o
Error message
Column {} does not exist in table {}. Skipping drop column operation. event: {} What it means
When handling an AlterTableDropColumnEvent, JdbcDialect verifies the column exists before generating DROP DDL. If the column is absent the operation is skipped with this warning, making drop-column evolution idempotent and tolerant of concurrent/replayed events.
Source
Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/JdbcDialect.java:553
}
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);
return;
}
applySchemaChange(connection, tablePath, addColumnEvent);
} else if (event instanceof AlterTableDropColumnEvent) {
AlterTableDropColumnEvent dropColumnEvent = (AlterTableDropColumnEvent) event;
if (!columnExists(connection, tablePath, dropColumnEvent.getColumn())) {
log.warn(
"Column {} does not exist in table {}. Skipping drop column operation. event: {}",
dropColumnEvent.getColumn(),
tablePath.getFullName(),
event);
return;
}
applySchemaChange(connection, tablePath, dropColumnEvent);
} else if (event instanceof AlterTableCommentEvent
|| event instanceof AlterColumnCommentEvent) {
// Comment-only changes are not supported by JDBC sink, safely ignore
log.info(
"Ignoring comment change event for table {} - JDBC sink does not support comment sync: {}",
tablePath.getFullName(),
event.getClass().getSimpleName());
} else {
throw new UnsupportedOperationException("Unsupported schemaChangeEvent: " + event);
}
}View on GitHub (pinned to cf67b549a7)
Solutions
- Benign skip if the column was intentionally removed earlier
- Verify column name/case matches the target database's identifier casing rules
- If the column should exist, re-create it before replaying the drop event
- Check for concurrent jobs altering the same table
Defensive patterns
Strategy: validation
Validate before calling
// pre-check before emitting drop-column DDL
if (!columnExists(conn, tablePath, columnName)) {
log.info("column absent; skip DROP COLUMN");
} Prevention
- Make drop handlers tolerant of already-dropped columns
- Normalize column-name casing against the target DB's rules
- Coordinate manual DDL changes with automated schema evolution
When it happens
Trigger: applySchemaChange receives an AlterTableDropColumnEvent for a column that does not exist in the target table (already dropped, never existed, or name mismatch).
Common situations: Event replay after restart; the column was already dropped manually or by another job; column name case/whitespace mismatch between CDC event and target DB.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Column {} already exists in table {}. Skipping change column
- Column {} already exists in table {}. Skipping add column op
- Table 'TablePath{databaseName='null', schemaName='null', tab
- Error executing SqlServer SQL: ${ddlSQL}
- Default value is not supported for column {} in table {}. Sk
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f81068d0891df1c6.
Report an issue: GitHub.