Skip to main content

Delta Lake vs Iceberg vs Hudi

Summary

  • Delta Lake, Apache Iceberg and Apache Hudi are open-source table formats. Each adds a metadata layer over data files in object storage to provide ACID transactions, schema evolution and time travel, and all three use the Apache License 2.0.
  • They track table state differently: Delta Lake with a _delta_log of JSON delta files and Parquet checkpoints, Iceberg with versioned metadata files and snapshots, and Hudi with a timeline of actions under .hoodie/timeline.
  • Each project documents its own emphasis: Delta's change data feed and liquid clustering, Iceberg's hidden partitioning and partition spec evolution, and Hudi's Copy-on-Write and Merge-on-Read table types with incremental and CDC queries.
  • On Databricks, Delta Lake is the default format, Unity Catalog managed tables use Delta or Iceberg, and the Unity Catalog docs do not list Hudi. Iceberg clients can read Delta tables through Iceberg reads (UniForm).
  • No format is best for every workload. Match the format to your engines, update pattern and platform.

Delta Lake vs Iceberg vs Hudi

Delta Lake, Apache Iceberg and Apache Hudi solve the same core problem. They add a metadata layer over data files in object storage so engines can read and write tables with ACID guarantees, schema evolution and time travel. They differ in how they track table state and in which features each project emphasizes. None is universally better, so the choice depends on your engines, update patterns and platform. On Databricks, Delta Lake is the default.

What is a table format?

A table format is a specification that records which data files make up a table and how the table changed over time. Delta Lake keeps that record in a _delta_log directory of JSON delta files and Parquet checkpoint files. The Iceberg spec keeps versioned metadata files, with snapshots representing table state, and tracks data files individually rather than by directory. Hudi logs every action on the table in a timeline under .hoodie/timeline.

How do Delta Lake, Iceberg and Hudi compare?

Capability Delta Lake Apache Iceberg Apache Hudi
License Apache License 2.0 Apache License 2.0 Apache License 2.0
Isolation Serializable ACID writes, snapshot isolation for reads Serializable isolation, reads use a committed snapshot Snapshot isolation, optimistic concurrency control between writers
Data files Parquet Parquet, Avro and ORC in the spec Base files in Parquet, ORC or HFile
Updates Merge, update and delete Merge, update rows and targeted deletes Copy-on-Write rewrites base files; Merge-on-Read writes updates to log files merged at query time
Time travel VERSION AS OF, TIMESTAMP AS OF VERSION AS OF (snapshot ID, branch or tag), TIMESTAMP AS OF TIMESTAMP AS OF a commit time
Incremental reads Change data feed (delta.enableChangeDataFeed) Spark incremental read with start-snapshot-id and end-snapshot-id, append operations only Incremental and CDC queries with hudi_table_changes
Schema evolution Schema enforcement, mergeSchema, ALTER TABLE ... ADD COLUMNS Add, drop, rename, widen type, reorder, without rewriting table data Backward-compatible changes on write; on-read evolution is experimental
Data layout PARTITIONED BY; liquid clustering (Delta Lake 3.1.0 and above) can change clustering columns without rewriting data Hidden partitioning; a new partition spec leaves old data unchanged Files organized into file groups and file slices within each partition

How does Databricks approach table formats?

Databricks originally developed the Delta Lake protocol and continues to contribute to the open source project. Delta Lake is the default format for all operations on Databricks.

  • Unity Catalog formats. Per the file format support docs, managed tables must use Delta or Iceberg. External tables can use Delta, CSV, JSON, Avro, Parquet, ORC or text. Hudi is not among the formats listed in the Unity Catalog documentation.
  • Iceberg reads (UniForm). Delta tables registered in Unity Catalog can generate Iceberg metadata, so Iceberg clients read Delta data without rewriting files. The table needs column mapping, and Iceberg client access is read-only.
  • Conversion. CONVERT TO DELTA does a one-time conversion of Parquet and Iceberg tables to Delta Lake.

How should you choose?

  • Delta Lake fits when you run on Databricks, where it is the default, or want a change data feed and liquid clustering.
  • Apache Iceberg fits when hidden partitioning, partition spec evolution, or branching and tagging matter.
  • Apache Hudi fits upsert-heavy tables where incremental or CDC queries and a choice of Copy-on-Write or Merge-on-Read matter.

FAQs

Which table format is the default on Databricks?

Delta Lake. Unless you specify otherwise, tables on Databricks are Delta Lake tables.

Does Unity Catalog support Hudi?

The Unity Catalog documentation lists Delta and Iceberg for managed tables and Delta, CSV, JSON, Avro, Parquet, ORC and text for external tables. Hudi does not appear in those lists.

Can I move from Iceberg to Delta?

Yes. CONVERT TO DELTA performs a one-time conversion of Parquet and Iceberg tables to Delta Lake tables, and Unity Catalog supports it for tables in external locations it manages. Databricks also documents incremental cloning of Parquet and Iceberg tables to Delta Lake. In the other direction, Iceberg clients can read Delta tables through Iceberg reads.

Do all three formats support time travel?

Yes. Each documents queries against an earlier version or timestamp. Hudi's docs note this suits machine learning pipelines that train on a specific point in time.

Which format is fastest?

It depends on the engine, data layout and workload, so test candidate formats on your own data.

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