apache/seatunnel · warning
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
This WARN log is emitted by SchemaChangeManager.applySchemaChange when an AlterTableDropColumnEvent names a column that no longer exists in the Doris table. The drop is skipped and the method returns early. This keeps schema-evolution replay idempotent: dropping an already-dropped column is treated as success rather than an ALTER failure.
Source
Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/schema/SchemaChangeManager.java:130
}
applySchemaChange(tablePath, changeColumnEvent);
} else if (event instanceof AlterTableModifyColumnEvent) {
applySchemaChange(tablePath, (AlterTableModifyColumnEvent) event);
} else if (event instanceof AlterTableAddColumnEvent) {
AlterTableAddColumnEvent addColumnEvent = (AlterTableAddColumnEvent) event;
if (columnExists(tablePath, addColumnEvent.getColumn().getName())) {
log.warn(
"Column {} already exists in table {}. Skipping add column operation. event: {}",
addColumnEvent.getColumn().getName(),
tablePath.getFullName(),
event);
return;
}
applySchemaChange(tablePath, addColumnEvent);
} else if (event instanceof AlterTableDropColumnEvent) {
AlterTableDropColumnEvent dropColumnEvent = (AlterTableDropColumnEvent) event;
if (!columnExists(tablePath, dropColumnEvent.getColumn())) {
log.warn(
"Column {} does not exist in table {}. Skipping drop column operation. event: {}",
dropColumnEvent.getColumn(),
tablePath.getFullName(),
event);
return;
}
applySchemaChange(tablePath, dropColumnEvent);
} else if (event instanceof AlterTableCommentEvent
|| event instanceof AlterColumnCommentEvent) {
// Comment-only changes are not supported by Doris sink, safely ignore
log.info(
"Ignoring comment change event for table {} - Doris sink does not support comment sync: {}",
tablePath.getFullName(),
event.getEventType());
} else {
throw new SeaTunnelException(
"Unsupported schemaChangeEvent : " + event.getEventType());
}View on GitHub (pinned to cf67b549a7)
Solutions
- Check DESC tbl — if the column is truly gone, the warning is expected and harmless; nothing to fix.
- If the column should exist under a different name, verify the upstream schema and table mapping (table-path/column-name mapping config) — the event may reference a stale column name.
- If the drop should not have happened at all, re-add the column (ALTER TABLE ... ADD COLUMN) and correct the upstream source to stop dropping it.
- Restart from the latest checkpoint so stale schema events are not replayed.
Example fix
// before: replayed DROP COLUMN for an already-dropped column ALTER TABLE db.tbl DROP COLUMN old_col; // after: confirm current schema first // DESC db.tbl; -- if old_col is absent, ignore; if event is stale, restart from latest checkpoint
Defensive patterns
Strategy: validation
Validate before calling
// Confirm the column actually exists before relying on drop events DESC db.tbl; // If the column is absent, the skip warning is expected and harmless
Type guard
boolean canApplyDrop(DorisTableSchema schema, String column) {
return schema.hasColumn(column);
} Prevention
- Restart from the latest checkpoint so old drop events are not replayed.
- Verify table-path/column-name mappings match the current upstream schema.
- Prevent external migrations from racing SeaTunnel schema evolution on the same table.
- Watch for upstream rename+drop sequences that make drop events arrive stale.
When it happens
Trigger: An AlterTableDropColumnEvent is processed and columnExists(tablePath, dropColumnEvent.getColumn()) is false — the column was already dropped in a prior run, upstream renamed it before the drop event arrived (change/drop race), the sink table was recreated without that column, or the event name differs by case/quoting from the real Doris column.
Common situations: Restarting a CDC pipeline from an old savepoint that replays drop events; a DBA manually dropped the column; upstream source executed rename-then-drop quickly and SeaTunnel receives both events after they already took effect; table rebuilt by a migration script.
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
- Unsupported schemaChangeEvent : <eventType>
- SCHEMA_CHANGE_FAILED
- SCHEMA_CHANGE_FAILED
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e3ee3ea128ea613b.
Report an issue: GitHub.