Glossary Entry

What is Apache Iceberg?

Apache Iceberg is an open table format for large analytic tables on object storage, covering its metadata tree, hidden partitioning, time travel, and catalogs.

Written by Alex Merced

What is Apache Iceberg?

Apache Iceberg is an open table format originally developed at Netflix for large analytic datasets. It brings the reliability and performance of traditional SQL database tables to open data lakes. Organizations storing large volumes of data on Amazon S3, Google Cloud Storage, or Azure Data Lake Storage use Iceberg to execute transactions, enforce schemas, and track data modifications without locking their architecture into a single vendor ecosystem.

Before Iceberg, the industry relied heavily on the Apache Hive metastore. Hive mapped database tables to physical directories in a file system. This directory-based approach broke down at scale. Query engines had to list many physical files before they could begin executing a query. This file-listing bottleneck hurt performance and made atomic transactions difficult. Iceberg solves this by tracking data at the file level through a metadata tree, decoupling the logical table structure from the physical storage layout.

The Architectural Foundation of Apache Iceberg

To understand how Iceberg manages large tables, engineers must look at its multi-layered metadata architecture. The table state is not determined by simply reading what files exist in a cloud bucket. Instead, the state is defined by an explicit metadata tree.

The Catalog Layer

The catalog is the source of truth for the current table state. When an engine like Dremio or Apache Spark queries an Iceberg table, it first asks the catalog for the location of the current metadata pointer. The catalog ensures that multiple concurrent writers do not corrupt the table by enforcing atomic pointer swaps during commit operations.

Metadata Files and Snapshots

The catalog points to a metadata file. This file contains the complete definition of the table at a specific point in time, known as a snapshot. It holds the table schema, partition spec, and properties. Every time a writer commits a change to an Iceberg table, a new metadata file is created, representing a new snapshot of the table history.

Manifest Lists and Manifest Files

Below the metadata file sits the manifest list. This component tracks all the manifest files required to reconstruct the current snapshot. It stores aggregated metrics about the data, such as lower and upper bounds of partition columns, allowing query engines to skip entire manifests that cannot match a query. The manifest files themselves map to the actual raw data files (typically Parquet, ORC, or Avro) and hold granular column-level statistics.

Hidden Partitioning

One of the most important changes Iceberg introduced is hidden partitioning. In traditional data warehouses and Hive-based lakes, partitioning required manual intervention. If data was partitioned by day, data engineers had to explicitly extract the day from a timestamp column and write it into a separate day column. Analysts then had to remember to query that explicit day column. If an analyst forgot and filtered on the original timestamp, the query engine would perform an expensive full table scan.

Iceberg removes this burden. The partition specification is decoupled from the physical data schema. Engineers can configure a table to partition by the day of a specific timestamp column under the hood. When an analyst runs a query filtering on that original timestamp, Iceberg automatically translates the filter to target the correct physical partitions. The user never needs to know the physical layout of the files. Furthermore, if the organization decides to change the partition strategy from daily to hourly, Iceberg evolves the partition specification in place without requiring an expensive rewrite of the historical data.

Schema Evolution Without Surprises

Data schemas are rarely static. Business requirements shift, applications add new tracking metrics, and data structures must adapt. Historically, adding a column, dropping a column, or renaming a field in a large data lake could require rewriting large amounts of data or maintaining complex external mapping scripts.

Iceberg supports in-place schema evolution. All schema changes are tracked independently through unique column IDs rather than relying on column names. If you rename a column, Iceberg updates the metadata file to map the new name to the existing internal ID. If you drop a column, the data remains in the old files, but Iceberg knows to ignore it during read operations. If you resurrect a previously dropped column name, Iceberg assigns a new, unique ID, so that old, deleted data does not resurface in new queries. This ID-based tracking makes schema evolution safe and predictable.

Time Travel and Rollbacks

Because Iceberg tracks table state through immutable snapshots, it retains a historical record of modifications. Every INSERT, UPDATE, or DELETE operation generates a new snapshot while preserving the old ones until they are explicitly expired.

This architecture enables a feature known as time travel. Analysts can append an AT TIMESTAMP clause (Dremio) or a TIMESTAMP AS OF clause (Spark SQL) to their SQL queries to retrieve the data exactly as it existed last Tuesday at noon.

-- Querying a specific snapshot in Dremio
SELECT * 
FROM iceberg_catalog.sales_data 
AT SNAPSHOT '49281059302194';

-- Querying data as it existed at a specific timestamp
SELECT * 
FROM iceberg_catalog.sales_data 
AT TIMESTAMP '2026-05-10 14:00:00';

This capability is useful for reproducing machine learning models, debugging data pipeline failures, or auditing financial records for regulatory compliance. If a pipeline accidentally ingests corrupted data, engineers can execute a metadata-only rollback operation, reverting the table to the last known healthy snapshot without rewriting any actual data files.

Copy-On-Write versus Merge-On-Read

When dealing with row-level modifications in a data lake, engineering teams must balance write performance against read performance. Iceberg supports two methods for handling updates and deletes.

Copy-On-Write (COW)

In a Copy-On-Write strategy, modifying a single row requires the processing engine to read the entire data file containing that row, remove or update the specific record, and write a new data file back to storage. This adds latency to the write process but keeps subsequent read operations fast, as query engines only need to scan the rewritten files.

Merge-On-Read (MOR)

Merge-On-Read takes the opposite approach. Instead of rewriting large data files, the engine writes the modification to a small, isolated “delete file” or “delta file.” The write operation completes quickly. However, the burden shifts to the read operation. When a query engine reads the table, it must simultaneously load the original data files and the associated delete files, merging them in memory to resolve the current state. This suits high-frequency ingestion streams but can degrade read performance if the delete files are not compacted regularly.

The Iceberg REST Catalog Specification

As the Iceberg ecosystem expanded, organizations began deploying multiple distinct compute engines simultaneously. A company might use Apache Flink for real-time streaming, Apache Spark for heavy batch ETL, and Dremio for high-concurrency BI dashboards.

To ensure all these engines interpret the table state identically, the community developed the Iceberg REST Catalog specification. This open API standardizes how compute engines interact with the metadata layer. Platforms like Apache Polaris and Dremio’s built-in catalog implement this REST specification, which improves interoperability across engines. By using an Iceberg REST Catalog, organizations reduce vendor lock-in and can change compute engines without migrating their physical storage.

Iceberg in the Agentic Lakehouse

Modern platforms utilize Apache Iceberg as the structural foundation for advanced AI operations. In an Agentic Lakehouse architecture, Iceberg provides consistent, versioned data that helps reduce AI hallucinations.

When an autonomous AI agent needs to evaluate historical sales trends, it does not query an isolated, outdated extract. It utilizes secure Agent Skills to execute SQL queries directly against the live Iceberg table. Iceberg’s metadata provides the agent with structural context, such as schemas, column statistics, and null counts, before it generates SQL. Combining Iceberg’s transactional reliability with agentic reasoning is an active area of data engineering.

Summary of Technical Value

Implementing Apache Iceberg turns a loosely organized data lake into a structured, transactional data architecture. It removes the file-listing bottlenecks of Hadoop-era systems, providing engines the metadata required to plan fast analytical queries over large datasets. The decoupling of storage from compute, combined with the open REST catalog standard, helps organizations keep ownership of their data architecture.

Frequently Asked Questions

Does Apache Iceberg replace Apache Spark? No. Iceberg is a table format, not a computation engine. You use Spark (or Dremio, or Trino) to query and write data into the Iceberg format.

Is Iceberg only for large organizations? While built for large scale, the architectural benefits of schema evolution, atomic transactions, and time travel are immediately valuable to teams of any size operating on cloud object storage.

How does Iceberg compare to Delta Lake? Both are capable open table formats providing ACID transactions. Iceberg has traditionally seen stronger adoption in the broader open-source ecosystem and multi-engine interoperability, largely due to its vendor-neutral governance under the Apache Software Foundation and the broad adoption of the REST Catalog API.

Can I convert existing Parquet files to Iceberg? Yes. You can execute an in-place metadata migration that builds Iceberg tracking manifests around your existing Parquet files, allowing you to upgrade your data lake without physically copying the underlying datasets.


Learn More

To learn more about the Data Lakehouse, read The Lakehouse Built for Everyone by Alex Merced. You can find this and other books by Alex Merced at books.alexmerced.com.

Related Terms

What is Open Table Format?

An open table format is a metadata spec that lets many engines read and write the same table safely. See how formats like Apache Iceberg add ACID to data lakes.

Iceberg Hidden Partitioning vs Hive Partitioning, Explained

Hidden partitioning is how Apache Iceberg derives partition values from column transforms. See how it compares to Hive directories and Delta generated columns.

What is Delta Lake?

Delta Lake is an open table format that adds ACID transactions to Parquet data lakes. Covers the Delta log, schema enforcement, time travel, and UniForm.

What is Partitioning?

Partitioning splits a large table into groups of files by column values so queries can skip data. Learn how Apache Iceberg's hidden partitioning handles it.

Hive Metastore (HMS): How It Works and How It Compares to Iceberg Catalogs

The Hive Metastore (HMS) is the catalog service that maps Hive tables to files. See how it compares to Iceberg REST catalogs like Polaris, Glue, and Nessie.

What is Apache Polaris?

Apache Polaris is an open-source implementation of the Apache Iceberg REST catalog spec, providing centralized role-based access control for many query engines.

What is Apache Kudu?

Apache Kudu is an open-source columnar storage engine for fast inserts, updates, and analytic scans using primary key indexes and Raft, and how Iceberg differs.

Apache XTable (Incubating): Translating Metadata Between Iceberg, Delta Lake, and Hudi

Apache XTable (incubating) translates table metadata between Iceberg, Delta Lake, and Hudi without copying data. See its limits and how it compares to UniForm.

What are Audit Logs?

Audit logs are chronological records of who did what, when, and from where in a system, covering WORM storage, structured event payloads, and anomaly alerts.

Work with Alex