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
Databend's SchemaChangeManager handles AlterTableDropColumnEvent. If the column to drop does not exist in the target table, the drop is skipped with this warning instead of failing, making the DDL idempotent. The table is left unchanged.
Source
Thrown at seatunnel-connectors-v2/connector-databend/src/main/java/org/apache/seatunnel/connectors/seatunnel/databend/schema/SchemaChangeManager.java:133
}
} 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(),
event);
return;
}
applyAddColumn(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;
}
applyDropColumn(connection, tablePath, dropColumnEvent);
} else {
throw new SeaTunnelException(
"Unsupported AlterTableColumnEvent type: " + event.getClass().getName());
}
}
/**
* Applies each column event in a grouped schema change.
*
* <p>The resolver wraps column-comment changes in {@link AlterTableColumnsEvent}, so the
* per-column dispatcher must handle comment events before structural column events.View on GitHub (pinned to cf67b549a7)
Solutions
- No action needed — the target state (column absent) is already achieved; verify remaining schema matches the source
- If the column should exist (event was wrong), re-add it and fix the upstream schema-change source
- Suppress duplicate replays with idempotent event handling to reduce log noise
Example fix
// before -- replayed: ALTER TABLE db.t DROP COLUMN old_col; (already dropped) // after — connector skips automatically; confirm schema convergence downstream
Defensive patterns
Strategy: retry
Validate before calling
// Pre-check before applying drop column
if (!columnExists(conn, tablePath, columnName)) { /* already dropped; skip */ } Prevention
- Treat drop-column DDL as idempotent; always check existence first
- Avoid manual DDL on tables managed by CDC schema evolution
- Reconcile schema drift between source and target periodically
When it happens
Trigger: Applying a drop-column event for a column already removed — due to event replay after restart, a prior manual drop, or the upstream source column having been dropped earlier.
Common situations: CDC pipelines replaying DDL after failure/restart; columns dropped manually in Databend; upstream schema evolution that already removed the column before the event arrived.
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
- 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/d0363637f4958677.
Report an issue: GitHub.