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

  1. No action needed — the target state (column absent) is already achieved; verify remaining schema matches the source
  2. If the column should exist (event was wrong), re-add it and fix the upstream schema-change source
  3. 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

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


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