
Apache Iceberg
The most widely supported open table format: snapshots of data files, tracked by a tree of metadata and swapped in atomically through a catalog.
- What it is
- Table formats
- Used for
- Lakehouses
- Type
- Open source
- Made by
- Apache Software Foundation
- License
- Apache 2.0
- Facts checked
- 5 October 2026
What it is
An Iceberg table is a tree of files. At the top, a table metadata file records the schema, the partition spec and the list of snapshots. Each snapshot points to a manifest list, which points to manifests, which list the data files (usually Parquet) with column statistics for each file. A catalog, such as a REST catalog, AWS Glue or a JDBC database, stores where the current metadata file is, and a commit swaps that pointer atomically.
Because there are statistics at every level, an engine can rule out whole manifests without listing any directories. Partitioning is hidden: you partition by days(ts), queries just filter on ts, and you can change the scheme later without rewriting old data. Netflix built Iceberg and contributed it to the Apache Software Foundation in 2018. Spec versions 1, 2 and 3 are complete; v3 adds deletion vectors, row lineage, column default values and new types such as variant, geometry and nanosecond timestamps. Version 4 is still in development.
Why teams pick it
- Wide engine support: Spark, Flink, Trino, DuckDB, ClickHouse, Snowflake, BigQuery, Athena and Redshift all work with it
- The REST catalog protocol is an open standard, so one catalog can serve every engine
- Hidden partitioning and partition evolution avoid accidental full scans and painful re-partitioning
- Managed offerings on the big clouds, such as Amazon S3 Tables and Google’s Apache Iceberg managed tables in BigQuery
Watch out for
- You need a catalog, and choosing one (Glue, Polaris, Nessie, a JDBC database and others) is a real decision
- Frequent small commits pile up snapshots, manifests and small files, so compaction and snapshot expiry must run on a schedule
- Engines adopt new spec versions unevenly: Athena works only with v2 tables, and Trino’s v3 support is experimental
- Many concurrent writers to one table cause commit conflicts and retries
Alternatives
What all table formats have in common →
Apache HudiOpen sourceA table format built for upserts and incremental pulls, with record-level indexes and built-in table services.
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.How it fits with other technologies
What Apache Iceberg uses
What uses Apache Iceberg
- Amazon Kinesis Data Streamscan write streaming tables inApache Iceberg
- Apache Flusstiers tables intoApache Iceberg
- Apache Kafkawrites topics via a sink connector intoApache Iceberg
- Redpandacan write topics as tables inApache Iceberg
- WarpStreambuilds tables with Tableflow inApache Iceberg
- Apache Flinkstreams writes into tables inApache Iceberg
- Arroyocommits streaming writes intoApache Iceberg
- Felderareads tables (experimental) fromApache Iceberg
- Pathwayreads and writes tables (Scale key) inApache Iceberg
- Quix Streamswrites streaming results intoApache Iceberg
- Redpanda Connectwrites CDC streams into tables inApache Iceberg
- RisingWavewrites, hosts and compacts tables inApache Iceberg
- Apache OpenDALdoes file I/O for the Rust library ofApache Iceberg
- Cloudflare R2can host a managed catalog forApache Iceberg
- SeaweedFShosts tables and a REST catalog forApache Iceberg
- Arccan register its files as tables inApache Iceberg
- Apache ORCcan be the data file format ofApache Iceberg
- Puffinstores statistics and deletion vectors forApache Iceberg
- Apache Paimonwrites compatible metadata for readers ofApache Iceberg
- Apache XTablewrites and reads the metadata ofApache Iceberg
- Delta Lakecan expose tables (UniForm) to readers ofApache Iceberg
- DuckLakecan copy tables out toApache Iceberg
- icepickcommits to and maintains tables inApache Iceberg
- Apache Polaristracks and commits tables inApache Iceberg
- Cloudflare Basin Catalogtracks, compacts and expires tables inApache Iceberg
- Lakekeepertracks and commits tables inApache Iceberg
- Project Nessieversions tables and views ofApache Iceberg
- Unity Catalogmanages and serves tables inApache Iceberg
- Amazon Athenareads and writes tables inApache Iceberg
- Apache DataFusion Cometspeeds up scans of tables inApache Iceberg
- Apache Hivecatalogs, reads and writes tables inApache Iceberg
- Apache Impalareads and writes tables inApache Iceberg
- Apache Sparkreads and writes tables inApache Iceberg
- Cloudflare Basin SQLqueries tables inApache Iceberg
- DuckDBreads and writes tables inApache Iceberg
- GlareDBreads table metadata ofApache Iceberg
- Hotdataingests tables fromApache Iceberg
- Polarsreads and writes tables inApache Iceberg
- Presto (PrestoDB)reads and writes tables inApache Iceberg
- Spice.ai OSSqueries and writes tables inApache Iceberg
- Trinoreads and writes tables inApache Iceberg
- ClickHousecan query tables inApache Iceberg
- Databendreads and inserts into tables inApache Iceberg
- Google BigQueryreads and writes tables inApache Iceberg
- MotherDuckreads and writes tables inApache Iceberg
- Snowflakereads and writes tables inApache Iceberg
- Apache Dorisqueries and writes tables inApache Iceberg
- Apache Druidcan ingest tables, via an extension, fromApache Iceberg
- Fireboltqueries and exports tables inApache Iceberg
- Pivotreads tables via a REST catalog inApache Iceberg
- StarRocksqueries and writes tables inApache Iceberg
- Tinybirdcan read tables, via a table function, inApache Iceberg
- AWS Lake Formationgoverns tables stored asApache Iceberg
- Amazon S3 Tablesstores every table in the format ofApache Iceberg
- Apache Amorocompacts and expires snapshots of tables inApache Iceberg
- Databricksmanages and serves tables inApache Iceberg
- Dremiostores tables and reflections asApache Iceberg
- Tiger Lakewrites v3 or v2 tables inApache Iceberg
- Airbytecan write tables asApache Iceberg
- Apache NiFiappends records to tables inApache Iceberg
- Artiewrites tables (Enterprise plan) intoApache Iceberg
- Bruinqueries tables in (beta)Apache Iceberg
- Estuarymaterializes collections as tables inApache Iceberg
- Fivetranwrites data lake tables asApache Iceberg
- OLakewrites and upserts tables inApache Iceberg
Table maintenance in Spark SQL: evolve partitioning, list snapshots, compact, expire · sql
-- "lake" is an Iceberg catalog; the table was partitioned by days(ts)
ALTER TABLE lake.sales.orders REPLACE PARTITION FIELD ts_day WITH hours(ts);
SELECT snapshot_id, committed_at, operation
FROM lake.sales.orders.snapshots
ORDER BY committed_at DESC;
CALL lake.system.rewrite_data_files(table => 'sales.orders');
CALL lake.system.expire_snapshots(
table => 'sales.orders',
older_than => TIMESTAMP '2026-09-01 00:00:00');See it in a real stack
Open lakehouse on Iceberg →Where it came from2017–2025
Netflix ran its analytics on Hive tables, the de facto standard layout that Hive, Presto and Spark all used. A Hive table tracks its partitions in a central metastore and finds the files inside by listing directories. On S3 that listing is slow, and while S3 listings were eventually consistent it could return wrong results. Changes to a table couldn’t be atomic, object stores have no real rename, and the metastore became a bottleneck when planning jobs.
Ryan Blue and Dan Weeks started Iceberg at Netflix in 2017 as “a new table format for storing large, slow-moving tabular data”, one that tracks every data file instead of directories. Netflix donated it to the Apache Software Foundation, where it entered the incubator in November 2018 and graduated in May 2020. Blue, Weeks and Jason Reid later founded Tabular, a data management company built on Iceberg.
Iceberg became the format most engines agreed on. In June 2024 Databricks, the company behind rival Delta Lake, agreed to acquire Tabular with the aim of making the two formats compatible, and in December 2024 AWS launched S3 Tables, which builds Iceberg support into S3 itself.
Why it’s built this way
- Track individual files, not directories
- Listing partition paths was slow on S3 and gave no atomicity. Iceberg’s metadata names every data file, so writers create files where they like and commit them explicitly, and planning a scan needs no listing.
- Commit by swapping one pointer
- Each change writes new metadata, then atomically replaces the pointer to the current metadata file. Readers never take locks and never see a partial write: the spec’s goal is serializable isolation.
- A written spec, independent of any engine
- Hive’s layout was a convention built into each engine. Iceberg wrote the table format down as a specification, so Spark, Trino, Flink and others could each implement it and read the same tables.
- Schema and partition changes are metadata-only
- The spec requires safe add, drop, rename and reorder of columns, including nested ones, and partition spec evolution, so changing a table’s design never means rewriting old data.
Timeline
- 2017
Ryan Blue and Dan Weeks start Iceberg at Netflix
- 2018
Donated to the Apache Software Foundation; enters the incubator in November
- 2020
Graduates to a top-level Apache project in May
- 2021
Format v2 tables, with row-level deletes, arrive in Iceberg 0.12
- 2022
Iceberg 1.0 released in November
- 2024
Databricks agrees to buy Tabular (June); AWS launches S3 Tables (December)
- 2025
Iceberg 1.8 adds format v3 features: deletion vectors,
variant, row lineage
- Netflix/iceberg: README (“a new table format for storing large, slow-moving tabular data”)
- Netflix/iceberg: Ryan Blue’s “Initial public release” commit (December 2017)
- Apache Incubator: Iceberg proposal (2018)
- Iceberg docs: Reliability (problems with Hive tables)
- Apache Incubator: Iceberg incubation status (entered November 2018, graduated May 2020)
- Iceberg table spec: goals, optimistic concurrency and format versions
- Iceberg releases: 0.12.0 adds v2 tables (August 2021), 1.8.0 (February 2025)
- GitHub: Apache Iceberg 1.0.0 release (November 2022)
- GitHub: Apache Iceberg 1.8.0 release notes (deletion vectors, variant, row lineage)
- Databricks agrees to acquire Tabular (June 2024)
- AWS What’s New: Amazon S3 Tables (December 2024)
Sources18 · facts checked 5 October 2026
- Iceberg table spec: metadata tree, atomic swap, format versions 1 to 4
- Iceberg docs: Partitioning (hidden partitioning)
- Iceberg docs: Evolution (schema and partition evolution)
- Iceberg REST catalog spec
- Iceberg docs: AWS integrations (Glue catalog)
- Iceberg docs: JDBC catalog
- Iceberg docs: Nessie catalog
- Apache Polaris: an open-source catalog for Apache Iceberg
- Iceberg docs: Vendors and third-party integrations (Athena, Redshift, ClickHouse, DuckDB, BigQuery, Snowflake, Trino)
- Iceberg docs: Maintenance (expire snapshots, compact data files)
- Iceberg docs: Spark DDL (REPLACE PARTITION FIELD)
- Iceberg docs: Spark procedures (rewrite_data_files, expire_snapshots)
- Iceberg releases
- ASF Project Spotlight: Apache Iceberg (donated by Netflix in 2018)
- Amazon S3 docs: Working with S3 Tables and table buckets
- BigQuery docs: Apache Iceberg managed tables
- Trino docs: Iceberg connector (format version 3 is experimental)
- Athena docs: Query Apache Iceberg tables (v2 tables only)