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

  1. Check DESC tbl — if the column is truly gone, the warning is expected and harmless; nothing to fix.
  2. 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.
  3. 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.
  4. 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

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


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/e3ee3ea128ea613b. Report an issue: GitHub.