Table formats
A metadata layer that turns a folder of data files into a real table, with transactions, schema changes and time travel.
12 technologies on this page ↓How it works
Apache Iceberg, Delta Lake and Apache Hudi keep metadata files next to the Parquet data files. Each commit writes new data files plus a new snapshot listing exactly which files make up the table, then makes it current in one atomic step: swapping a pointer in a catalog (Iceberg) or adding the next entry to a transaction log (Delta Lake). That gives you ACID transactions on object storage. Readers always see a complete snapshot, concurrent writers detect conflicts and retry, and old snapshots stay readable for time travel until you expire them. Adding or renaming a column is a metadata change, so it doesn’t rewrite the data.
The catalogue of a library whose books never move. The catalogue says which books make up the collection right now, and you can pull last year’s edition to see what it said then.
Reach for it when
Think twice when
- Many small single-row writes per second; each commit adds files and metadata, so batch them or use a database
- A handful of files that one tool reads; plain Parquet is enough
A real example
A streaming job commits new orders to an Iceberg table every minute while a nightly job compacts small files and deletes rows for customers who asked to be erased. Analysts in Trino and data scientists in Spark query the same table and never see a half-written commit. Finance reruns last quarter’s report against the snapshot from 1 July.
More on table formats
Narrower ideas that build on this one.
Technologies
Specific products, and what each does differently.
Apache HudiOpen sourceA table format built for upserts and incremental pulls, with record-level indexes and built-in table services.
Apache IcebergOpen sourceThe most widely supported open table format: snapshots of data files, tracked by a tree of metadata and swapped in atomically through a catalog.
LanceOpen sourceA file and table format for AI data: columnar like Parquet, but fast at fetching single rows, with vector and full-text indexes, versions and room for images and video.
PuffinOpen sourceApache Iceberg’s file format for the data that doesn’t fit in a manifest: a container of typed binary blobs, such as distinct-value sketches and deletion vectors, described by a JSON footer.Mainly File formatsApache PolarisOpen sourceAn open-source Iceberg REST catalog: one server that every engine asks where a table’s current metadata is, with role-based access control and short-lived storage credentials per table.Mainly Lakehouse catalogs
Amazon S3 TablesAWSA bucket type for Apache Iceberg tables: S3 stores them, acts as their catalog, and compacts and cleans them up for you.Mainly Lakehouses
Apache AmoroIncubatingOpen sourceAn incubating Apache “lakehouse management system”, started at NetEase as Arctic, that watches Iceberg tables and keeps them fast on its own: it compacts small files, rewrites deletes and expires old snapshots and files in the background.Mainly Lakehouses Apache Hudi | Open source | Apache Software Foundation | Apache 2.0 | 2026-10-05 |
Apache Iceberg | Open source | Apache Software Foundation | Apache 2.0 | 2026-10-05 |
| Open source | Apache Software Foundation | Apache 2.0 | 2026-10-06 | |
| Apache XTableIncubating | Open source | Apache Software Foundation | Apache 2.0 | 2026-10-11 |
| Open source | Linux Foundation (created by Databricks) | Apache 2.0 | 2026-10-05 | |
| Open source | The DuckDB team | MIT | 2026-10-05 | |
| icepickExperimental | Open source | Clay Smith | Apache 2.0 | 2026-10-11 |
Lance | Open source | Lance community, started by LanceDB | Apache 2.0 | 2026-10-05 |
Puffin | Open source | Apache Software Foundation | Apache 2.0 | 2026-10-11 |
| Apache Polaris | Open source | Apache Software Foundation | Apache 2.0 (since the first public release in July 2024) | 2026-10-06 |
Amazon S3 Tables | Managed service on AWS | Amazon Web Services | Proprietary (the S3 Tables Catalog for Apache Iceberg client library is Apache 2.0) | 2026-10-06 |
Apache AmoroIncubating | Open source | Apache Software Foundation | Apache 2.0 | 2026-10-11 |
What each provider calls it
- AWS
- S3 Tables (managed Iceberg), Glue Data Catalog, Lake Formation
- Google Cloud
- Apache Iceberg managed tables in BigQuery, Lakehouse runtime catalog (formerly BigLake metastore)
- Azure
- Microsoft Fabric OneLake (Delta Lake), Azure Databricks (Unity Catalog)
- Open source & others
- Apache Iceberg, Delta Lake, Apache Hudi, Apache Paimon, Lance (for AI data); catalogs such as Apache Polaris, Unity Catalog and Nessie
See it in a real stack
Architectures that use table formats
In code · sql
-- Spark SQL with an Iceberg catalog named "lake"
CREATE TABLE lake.sales.orders (
order_id BIGINT, customer_id BIGINT, amount DECIMAL(10,2), ts TIMESTAMP
) USING iceberg
PARTITIONED BY (days(ts));
MERGE INTO lake.sales.orders t
USING updates u ON t.order_id = u.order_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
-- time travel: the table as it was on 1 July
SELECT sum(amount) FROM lake.sales.orders TIMESTAMP AS OF '2026-07-01 00:00:00';Often confused with
Where it came from2009–2025
Hive, built at Facebook and described in a 2009 VLDB paper, gave Hadoop its idea of a table: an HDFS directory of files, split into partition subdirectories such as ds=20090101, with a metastore recording each table’s schema and location. That worked for batch loads, but the files were the truth. Readers found data by listing directories, writers changed tables by adding and renaming files, and nothing stopped a query from seeing half of an update.
Cloud object stores made this worse. Listing millions of objects was slow, consistency guarantees were limited, and a rename on S3 is really a copy. Between 2016 and 2017 three companies built a fix independently: Uber built Hudi to apply database changes to its lake within minutes, Netflix started Iceberg to replace Hive’s layout with a spec that tracks every file, and Databricks launched Delta Lake after cloud storage problems caused around half of its support escalations. All three record the exact list of files in each table version and switch versions atomically.
All three were open source by 2019 and competed for years before converging. Delta’s UniForm (2023) writes Iceberg and Hudi metadata, Apache XTable converts between formats, and in 2024 Databricks agreed to acquire Tabular, the company founded by Iceberg’s creators. Newer designs such as DuckLake (2025) move the metadata into a SQL database altogether.
Why it’s built this way
- Track files explicitly, not directories
- Listing directories is slow on object stores and can’t tell a finished write from a half-written one. A manifest or log that names every file makes the table’s contents exact.
- One atomic step per commit
- Object stores have no multi-object transactions, but a single small write can be made atomic: swapping a pointer in a catalog (Iceberg) or creating the next log file (Delta Lake). Writers that lose the race retry.
- Immutable data files plus delete markers
- Parquet files can’t be edited in place, so updates write new files, and Iceberg v2 records deleted rows in separate delete files instead of rewriting whole files.
- Keep old snapshots
- Because files are never modified, an old version costs only storage. That gives time travel and reproducible reads until the snapshot is expired.
Timeline
- 2009
Hive paper describes tables as directories plus a metastore
- 2016
Uber builds Hudi to apply updates to its Hadoop lake
- 2017
Iceberg starts at Netflix; Databricks launches Delta for customers
- 2019
Delta Lake open-sourced; Hudi joins Iceberg in the Apache Incubator
- 2023
Delta Lake UniForm writes Iceberg and Hudi metadata
- 2024
XTable enters the Apache Incubator; Databricks agrees to buy Tabular
- 2025
DuckLake keeps table metadata in SQL; Iceberg adds v3 deletion vectors
- Hive: A Warehousing Solution Over a Map-Reduce Framework (VLDB 2009)
- Delta Lake: High-Performance ACID Table Storage over Cloud Object Stores (VLDB 2020)
- Uber Engineering: Apache Hudi submitted to the ASF (developed in 2016, open-sourced 2017)
- Apache Incubator: Iceberg proposal (Hive’s layout and object store limits)
- Netflix/iceberg: Ryan Blue’s “Initial public release” commit (December 2017)
- Databricks blog: Introducing Databricks Delta (October 2017)
- Databricks: Databricks open sources Delta Lake (April 2019)
- Apache Incubator: Iceberg incubation status (entered November 2018)
- Apache Incubator: Hudi incubation status (entered January 2019)
- Delta Lake 3.0 and UniForm announcement (June 2023)
- Apache Incubator: XTable incubation status (entered February 2024)
- Databricks agrees to acquire Tabular (June 2024)
- DuckLake: SQL as a Lakehouse Format (May 2025)
- GitHub: Apache Iceberg 1.8.0 release notes, v3 deletion vectors (February 2025)
Sources21
- Iceberg table spec: snapshots, atomic metadata swap, optimistic concurrency, delete files
- Delta transaction log protocol
- Delta Lake docs: Concurrency control
- Hudi docs: Timeline
- Iceberg docs: Evolution (schema changes without rewriting data)
- Iceberg docs: Maintenance (expire snapshots)
- Iceberg docs: Spark writes (MERGE INTO)
- Iceberg docs: Spark queries (TIMESTAMP AS OF)
- Iceberg docs: Vendors and third-party engines (Trino, Snowflake, DuckDB and others)
- Amazon S3 docs: Working with S3 Tables and table buckets
- AWS Glue docs: Using the Iceberg framework
- Lake Formation docs: Permissions for Iceberg, Hudi and Delta Lake tables
- BigQuery docs: Apache Iceberg managed tables (formerly BigLake tables for Apache Iceberg in BigQuery)
- Google Cloud docs: Lakehouse runtime catalog (BigLake renamed Lakehouse, April 2026)
- Microsoft Fabric docs: Delta Lake table format interoperability
- Azure Databricks docs: What is Unity Catalog?
- Apache Paimon docs
- Lance table format specification
- Apache Polaris: an open-source catalog for Apache Iceberg
- Unity Catalog (open source)
- Project Nessie: transactional catalog for data lakes