Skip to main content

Is Delta or Iceberg better for AI and ML workloads

Summary

  • Neither Delta Lake nor Apache Iceberg is better for AI and ML in general. Both are open table formats with ACID guarantees, schema evolution and versioned tables, so the deciding factors are the engines and platform features your pipeline depends on.
  • On Databricks, Delta Lake is the default table format. Feature tables in Unity Catalog are Delta tables with a primary key, and MLflow can record the Delta table version used to train a model.
  • Apache Iceberg is also supported on Databricks, as managed Iceberg tables in Unity Catalog and through the Iceberg REST catalog for external engines.
  • Delta tables can expose Iceberg metadata through Iceberg reads (UniForm), so Iceberg clients can read them without rewriting files. That access is read-only.
  • Choose by who writes the table, which engines read it, and whether you rely on Delta-based feature tables.

Is Delta or Iceberg better for AI and ML workloads

Neither format is better for AI and ML in general. Delta Lake and Apache Iceberg both provide ACID transactions, schema evolution and versioned snapshots over open data files, so either can feed training and inference pipelines. On Databricks, the practical differences come from platform features: Delta is the default table format, and feature tables in Unity Catalog are Delta tables. Pick the format by which engines read and write your tables and which platform features your ML pipeline uses.

What are Delta Lake and Apache Iceberg?

Delta Lake is an open-source storage framework and a sub-project of the Linux Foundation Projects. Data lives in Parquet files, and a _delta_log directory holds JSON delta files that record each atomic change and Parquet checkpoint files that capture the full table state. Databricks originally developed the Delta Lake protocol and continues to contribute to the open source project.
Apache Iceberg is a format for huge analytic tables. Its spec provides serializable isolation, where reads always use a committed snapshot of the table, along with schema and partition spec evolution. Spark, Flink and Hive are among the engines that work with Iceberg tables.

Which capabilities matter for ML?

Capability Delta Lake Apache Iceberg Why it matters for ML
Isolation Serializable ACID writes, snapshot isolation for reads Serializable isolation, reads use a committed snapshot Training jobs read a consistent table while pipelines write
Versioned data Time travel; the Delta docs cite reproducible machine learning experiments Time travel and rollback to specific table snapshots Rebuild the exact training set behind a model
Schema changes Schema enforcement and schema evolution Full schema evolution: add, rename and reorder columns without table rewrites Feature columns change over time
Row-level changes Merge, update and delete Merge, row updates and targeted deletes Backfill and correct feature values
Data files Parquet Parquet, Avro and ORC in the spec; Parquet only for Iceberg tables on Databricks Readers must support the file format

How does Databricks approach Delta and Iceberg for ML?

  • Delta is the default. Delta Lake is the default format for all operations on Databricks. To create a managed Iceberg table, specify USING iceberg (Databricks Runtime 16.4 LTS or above).
  • Feature tables are Delta tables. Feature tables in Unity Catalog must have a primary key. A time column added as a primary key column with the TIMESERIES keyword makes a time series feature table, which enables point-in-time lookups in create_training_set and score_batch.
  • Training runs can pin a Delta version. The Databricks docs log a specific table version as a training input, and the lineage appears on the model version in Unity Catalog (MLflow 2.11.0 and above):
dataset = mlflow.data.load_delta(table_name="prod.ml_team.iris", version="0")
mlflow.log_input(dataset, "training")
  • Iceberg clients can reach Databricks tables. Through the Iceberg REST catalog, external clients can read and write managed Iceberg tables. Foreign Iceberg tables and Delta tables with Iceberg reads enabled are read-only. You enable external data access on the metastore and grant EXTERNAL USE SCHEMA on the schema.

To turn on Iceberg reads for an existing Delta table on Databricks Runtime 15.4 LTS or above, the docs use these table properties:

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

How should you choose?

  • Feature tables and point-in-time training sets point to Delta, because feature tables in Unity Catalog are Delta tables.
  • External engines that must write to the same table point to managed Iceberg tables, which support read and write through the Iceberg REST catalog.
  • External engines that only read can use Delta tables with Iceberg reads enabled.

FAQs

Can I use both Delta and Iceberg in one catalog?

Yes. Unity Catalog managed tables support both Delta Lake and Apache Iceberg. Without USING iceberg, Databricks creates a Delta Lake table.

Can an Iceberg client read my Delta tables?

Yes, when Iceberg reads (UniForm) are enabled. The Delta table must be registered in Unity Catalog and have column mapping enabled, and you can't enable deletion vectors on it. Iceberg client support is read-only.

Do both formats support time travel for reproducible training data?

Yes. Each operation that modifies a Delta Lake or Apache Iceberg table creates a new table version on Databricks, so you can audit operations, roll back, or query a specific point in time. Foreign Iceberg tables have their own documented limits.

Which format do feature tables use?

Delta. Any Delta table with a primary key constraint in Unity Catalog can serve as a feature table.

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