Handling Schema Evolution
SkillDev toolsEvolve data schemas safely over time, backward/forward compatibility, additive vs breaking changes, column adds/renames/type changes, and evolution in Avro, Parquet, Iceberg, Delta, and warehouse tables. Use when changing a table or event schema, adding or renaming columns, changing types, or preventing a schema change from breaking readers or pipelines.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Handling Schema Evolution skill
What this skill tells your AI
The instructions your AI receives, as published by unknown-333/awesome-data-engineering-skills in skills/handling-schema-evolution/SKILL.md and read by ahel’s review.
When to use
- Changing a table, file, or event schema that others read.
- Adding, renaming, dropping, or retyping columns.
- Choosing a compatibility mode for Avro/Iceberg/Delta/Parquet.
- Do NOT use for cross-team producer interfaces (use
designing-data-contracts).
Compatibility model
- Backward compatible — new readers can read old data (safe to add optional fields with defaults). Most warehouse evolution targets this.
- Forward compatible — old readers can read new data (they ignore new fields).
- Full — both. Aim for backward-compatible-by-default.
Workflow
- [ ] Classify the change: additive (safe) or breaking
- [ ] Prefer additive: add nullable/defaulted columns
- [ ] For renames/type changes, add-new + backfill + dual-write, then deprecate
- [ ] Enable the format's schema evolution settings deliberately
- [ ] Communicate + version breaking changes
- Classify. Additive (new optional column) is safe. Rename, drop, type narrowing, or nullability tightening are breaking.
- Prefer additive. Add a nullable/defaulted column instead of mutating an existing one.
- Migrate breaking changes in steps: add the new column, backfill it, dual-write old+new, switch readers, then drop the old column later.
- Configure the format — evolution is opt-in and format-specific (below).
- Version + announce anything breaking.
Patterns
Additive, backward-compatible column:
ALTER TABLE fct_orders ADD COLUMN discount_amount NUMERIC DEFAULT 0; -- readers unaffected
Rename without breaking readers — add the new name, backfill, dual-write, then deprecate the old column across a release window (never rename in place on a table others read).
Format-specific evolution:
- Avro — use a schema registry with
BACKWARDcompatibility; add fields with defaults, never remove required fields. - Delta —
mergeSchemaon write for additive columns; explicitALTER TABLEotherwise. Column mapping enables safe renames/drops. - Iceberg — full schema evolution by column ID: add/drop/rename/reorder without rewriting data.
- Parquet (raw) — no built-in evolution; a table format (Delta/Iceberg/Hudi) or explicit reconciliation on read is required.
Common pitfalls
- Renaming/dropping a column in place on a shared table — breaks every reader immediately; use add-new + deprecate.
- Narrowing a type (int→smallint, widening→tightening) — overflows/truncation; only widen.
- Positional schema assumptions — code that reads by column order breaks on reorder; read by name/ID.
- Blind
mergeSchemaeverywhere — silently absorbs typos as new columns; use it intentionally and monitor for drift. - No backfill for a new non-null column — old rows violate the constraint; add as nullable/defaulted, backfill, then tighten.
- Breaking change with no version or notice — coordinate through a contract and a deprecation window.
Signals
- GitHub stars
- 21
- Last commit
- Aug 2026
Advanced
- Item type
- skill
- Key
handling-schema-evolution- Source
- github.com/unknown-333/awesome-data-engineering-skills