Skip to main content

Delta Lake versus Apache Iceberg: which should I choose?

Summary

  • Choose by which engines write your tables and which catalog governs them. Delta Lake and Apache Iceberg both bring ACID transactions, time travel, schema evolution and row-level updates to Parquet data, so a feature checklist alone seldom settles it.
  • By default, Delta Lake treats the transaction log at the table's location as the source of truth. Iceberg tracks snapshots through metadata files and manifests, and a catalog points readers to the current metadata file.
  • Feature-level differences matter for specific workloads: liquid clustering and Change Data Feed in Delta Lake; hidden partitioning, partition evolution, branches and tags in Iceberg.
  • You may not have to pick one. Delta Lake's UniForm writes Iceberg metadata for the same Parquet files, and Unity Catalog manages tables in both formats with access from Delta Lake and Iceberg clients.

Delta Lake versus Apache Iceberg: which should I choose?

Pick the format that your writing engines and your catalog support natively, then use interoperability for everything that only reads. Both projects give Parquet tables atomic commits, queryable history, schema evolution and row-level changes. What separates them is metadata design, the catalog model and a set of specific features, so the right answer depends on your stack. With interoperability turned on, one copy of the data can serve clients of both formats.

How they compare

The rows paraphrase what each project documents about itself, with no verdict attached.

Capability Delta Lake Apache Iceberg
Transactions ACID with serializable isolation; optimistic concurrency control between writers Serializable isolation through atomic metadata swaps; concurrent writers use optimistic concurrency and retry
Source of truth The transaction log at the table's location; catalog-managed tables (Delta Lake 4.0.1 and above) let a catalog coordinate commits Metadata files, located through a catalog such as a Hive metastore, a REST catalog or a directory-based catalog
Time travel VERSION AS OF and TIMESTAMP AS OF VERSION AS OF and TIMESTAMP AS OF, plus branches and tags with their own retention
Schema changes Schema enforcement on write; column mapping enables RENAME COLUMN and DROP COLUMNS without rewriting Parquet files Add, drop, update or rename columns, documented as having no side-effects
Data layout Partitioning, or liquid clustering, whose clustering columns can change without rewriting existing data (Delta Lake 3.1.0 and above) Hidden partitioning; partition layout can evolve as a metadata operation
Row-level changes MERGE, UPDATE and DELETE; deletion vectors, documented as experimental, mark rows as removed without rewriting the Parquet file Copy-on-write or merge-on-read, chosen per operation; delete files in format v2 and deletion vectors in v3
Change tracking Change Data Feed records row-level changes between table versions The create_changelog_view procedure; streaming reads of append snapshots
Streaming A table is both a streaming source and a streaming sink Structured Streaming reads and writes; streaming reads process append snapshots only

The questions that decide it

  1. Which engines write? Delta Lake's protocol docs say every writer must understand all the features in a table's write protocol, while read-only applications aren't affected by writer features. Pick the format your writers fully support, and serve read-only engines through interoperability.
  2. Which catalog governs the tables? Iceberg engines load tables through a catalog, and the REST Catalog API gives every language and engine one protocol for it. Delta Lake works by path out of the box, and catalog-managed tables move commit coordination into a catalog.
  3. Which features will your workloads lean on? Incremental pipelines built on row-level change records map naturally to Change Data Feed. Shifting query patterns benefit from liquid clustering or from Iceberg's partition evolution. Audit and experimentation workflows may want Iceberg branches and tags.
  4. What do you already have? Delta Lake converts Parquet tables, and Iceberg tables stored as Parquet, in place with CONVERT TO DELTA, without copying data (the docs exclude Iceberg tables with partition evolution or merge-on-read row changes). Iceberg's snapshot and migrate procedures bring existing Hive or Spark tables into Iceberg.

If you need both, enable UniForm on a Delta table (open-source Delta Lake requires version 3.1 or above, column mapping and a Hive metastore catalog for this):

CREATE TABLE sales (id INT, amount DOUBLE) USING DELTA TBLPROPERTIES (
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

How Databricks approaches Delta Lake and Apache Iceberg

Databricks' public position is support for both formats in Unity Catalog. In its words, Unity Catalog managed tables "are the default and recommended table type in Databricks for Delta Lake and Apache Iceberg," and they "support interoperability by allowing access from Delta Lake and Apache Iceberg clients." Delta Lake is the default storage format. For managed Iceberg tables, Unity Catalog handles snapshot expiration and file compaction, and external engines read and write through the Iceberg REST Catalog API with credential vending; Databricks supports versions 1, 2 and 3 of the Iceberg specification. For Delta tables, Iceberg reads (UniForm) generate Iceberg metadata automatically, so Iceberg clients can read the data without rewriting files. See Apache Iceberg in Databricks.

FAQs

Can I use Delta Lake and Iceberg on the same data?

Yes. UniForm generates Iceberg metadata asynchronously after each Delta commit, so Iceberg clients read the same Parquet files and a single copy of the data serves both.

Does converting between formats rewrite my data?

Not for Parquet-based tables. Delta Lake's in-place conversion from Iceberg creates a Delta transaction log from the Iceberg table's manifests, schema and partitioning, with no data copy, and the two tables keep separate histories afterward.

Are both formats open source?

Yes. Delta Lake is an open source project with connectors for engines that include Apache Spark, Apache Flink and Apache Hive. Apache Iceberg is developed at the Apache Software Foundation as an open community standard with a public table specification.

Does my choice lock me into one engine?

No. Both formats are designed for multi-engine access, and interoperability features plus a shared catalog let different engines work with the same tables.

The information provided herein is for general informational purposes only and may not reflect the most current product capabilities or configurations.