{"record":{"id":"e3ee3ea128ea613b","repo":"apache/seatunnel","slug":"column-does-not-exist-in-table-skipping-dro-e3ee3e","errorCode":null,"errorMessage":"Column {} does not exist in table {}. Skipping drop column operation. event: {}","messagePattern":"Column (.+?) does not exist in table (.+?)\\. Skipping drop column operation\\. event: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/schema/SchemaChangeManager.java","lineNumber":130,"sourceCode":"                }\n                applySchemaChange(tablePath, changeColumnEvent);\n            } else if (event instanceof AlterTableModifyColumnEvent) {\n                applySchemaChange(tablePath, (AlterTableModifyColumnEvent) event);\n            } else if (event instanceof AlterTableAddColumnEvent) {\n                AlterTableAddColumnEvent addColumnEvent = (AlterTableAddColumnEvent) event;\n                if (columnExists(tablePath, addColumnEvent.getColumn().getName())) {\n                    log.warn(\n                            \"Column {} already exists in table {}. Skipping add column operation. event: {}\",\n                            addColumnEvent.getColumn().getName(),\n                            tablePath.getFullName(),\n                            event);\n                    return;\n                }\n                applySchemaChange(tablePath, addColumnEvent);\n            } else if (event instanceof AlterTableDropColumnEvent) {\n                AlterTableDropColumnEvent dropColumnEvent = (AlterTableDropColumnEvent) event;\n                if (!columnExists(tablePath, dropColumnEvent.getColumn())) {\n                    log.warn(\n                            \"Column {} does not exist in table {}. Skipping drop column operation. event: {}\",\n                            dropColumnEvent.getColumn(),\n                            tablePath.getFullName(),\n                            event);\n                    return;\n                }\n                applySchemaChange(tablePath, dropColumnEvent);\n            } else if (event instanceof AlterTableCommentEvent\n                    || event instanceof AlterColumnCommentEvent) {\n                // Comment-only changes are not supported by Doris sink, safely ignore\n                log.info(\n                        \"Ignoring comment change event for table {} - Doris sink does not support comment sync: {}\",\n                        tablePath.getFullName(),\n                        event.getEventType());\n            } else {\n                throw new SeaTunnelException(\n                        \"Unsupported schemaChangeEvent : \" + event.getEventType());\n            }","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/schema/SchemaChangeManager.java#L112-L148","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before: replayed DROP COLUMN for an already-dropped column\nALTER TABLE db.tbl DROP COLUMN old_col;\n// after: confirm current schema first\n// DESC db.tbl;  -- if old_col is absent, ignore; if event is stale, restart from latest checkpoint","handlingStrategy":"validation","validationCode":"// Confirm the column actually exists before relying on drop events\nDESC db.tbl;\n// If the column is absent, the skip warning is expected and harmless","typeGuard":"boolean canApplyDrop(DorisTableSchema schema, String column) {\n    return schema.hasColumn(column);\n}","tryCatchPattern":null,"preventionTips":["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."],"tags":["schema-change","doris","idempotency","schema-evolution"],"backgroundTag":"resource-not-found","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}