Cloud Data Services
Intermediate 15 min read Cloud Data Services

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.

icebergdelta lakehudiACIDsnapshot isolationtime travelopen table format
Before we start

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
Introduction

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.

Motivation

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.
Think about it

Mental model

Imagine

A filing cabinet vs a ledger

Think of

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.

Mechanics

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.

Catalog
MetadataFile
Snapshot
Manifests
Parquet files
Real world

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.
Guidelines

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'.
Watch out

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).
When things break

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.
Interviews

Interview checkpoint

Test yourself

Quick quiz

0/2
1

What is the main advantage of an open table format over plain Parquet files?

2

Iceberg, Delta Lake and Hudi readers can all read the same committed table without an engine-native catalog in some setups.

Go deeper

Official documentation