Open Table Formats
Making object storage behave like a transactional table
Parquet is a file; a table is a bargain with metadata. Open table formats (Iceberg, Delta Lake, Hudi) bring ACID transactions, snapshots and incremental reads to data lake storage — the backbone of the modern lakehouse.
What you will learn
- Explain what an open table format adds on top of Parquet-on-storage
- Use snapshot isolation and time travel to recover from bad writes
- Read a table from multiple engines (Spark/BigQuery/DuckDB) without copying data
What is this?
A lake is a folder of Parquet files, but files alone are not a table: no atomic commit, no schema-on-read safety, no clean rollback. Open table formats keep a small metadata layer (manifests, snapshot logs) on the same storage that tracks which files belong to which snapshot. Writers commit atomically by writing new manifests; readers get a consistent snapshot; deletes and updates rewrite only affected files. Iceberg, Delta Lake and Hudi differ in internals but share the promise: warehouse-grade transactions on cloud object storage at lake scale.
Why do you need it?
- ACID on the lake: a failed write never leaves half of a table visible.
- Time travel and rollback: step back to the snapshot before the bad job ran.
- Multi-engine reads: Spark, Trino, BigQuery and DuckDB all read the same Iceberg table in place.
- Incremental processing: read only changed files since a watermark instead of re-scanning everything.
Mental model
A filing cabinet vs a ledger
Files-in-a-folder vs an open table format
A folder of files is a cabinet: you can rifle through it, but 'what is the current state?' has no single answer. A ledger (metadata log) tells you the agreed current state and every previous one — that's the snapshot/commit model of Iceberg or Delta.
How it works
- Commit: a writer atomically swaps the current metadata pointer (e.g., Iceberg's latest.metadata.json ref) to a new snapshot.
- Snapshots: every commit records the exact file list; old snapshots stay readable for time travel.
- Manifests: small files listing data files and their column/statistics for pruning.
- Compaction: background jobs merge small files so snapshots don't accumulate fragmentation.
- Optimistic concurrency: writers pass the expected base snapshot and fail (or retry) if it moved.
Iceberg-style table: metadata references snapshots, each referencing manifests and data files.
In production
- A retail analytics team writes daily loads as Iceberg; when Tuesday's job duplicated rows, they rolled back to Monday's snapshot in minutes and re-ran with a fix.
- A media company points both Trino (interactive) and Spark (batch) at the same Delta table; the lake replaces a separate warehouse.
- A fintech uses incremental reads to stream only changed events since the last checkpoint into feature stores.
Best practices
- Adopt the format once and standardize: mixed Iceberg/Delta across teams recreates byte-copy silos.
- Compaction on a schedule so snapshots stay lean and queries don't chase thousands of files.
- Keep a default branch and require explicit snapshots for risky experiments.
- Choose your catalog intentionally (AWS Glue, Nessie, Hive Metastore, or the engine's own) — that is where the table 'lives'.
Common mistakes
- Treating open table formats as a partitioning tool instead of a transaction layer.
- Forgetting to expire old snapshots until storage balloons and orphan files pile up.
- Mixing writers that don't honor the format's isolation rules (e.g., writing Parquet beside an Iceberg table).
Debugging tips
- Reader 'sees old data': confirm which snapshot the engine was pointed at (catalog vs direct path) before blaming the write.
- Dry-run a rollback: cannot start rewriting the table in place on a broken commit without a safe failover strategy.
- Small-file explosion after UPSERTS: run compaction and rebalance to restore scan efficiency.
- Reading via the wrong engine/catalog connector yields metadata mismatches — check engine's supported table formats.
Interview checkpoint
Quick quiz
What is the main advantage of an open table format over plain Parquet files?
Iceberg, Delta Lake and Hudi readers can all read the same committed table without an engine-native catalog in some setups.