Skip to content

Delta Lake vs Apache Iceberg: Three Questions That Choose the Format for You

Delta Lake and Apache Iceberg now match on core capabilities, so the choice comes down to three questions: which engine writes the table, which catalog governs it, and who must read it without a copy. A decision guide with the Microsoft Fabric interop paths.

Prasanth Sistla7 min read

TL;DR

A data lake is a pile of files. An open table format is the metadata contract that turns the pile into a database table: one schema, one history, safe concurrent writes. Two formats matter in 2026, Delta Lake and Apache Iceberg, and they now match on core capability, so the choice comes down to three questions: which engine writes the table, which catalog governs it, and who must read it without a copy. Answer them in order and the format picks itself. In Microsoft Fabric the first answer is pre-made, every engine writes Delta, so the decision moves to interop.

  • The convergence. Row-level deletes without rewrites, time travel, schema evolution: both do it all now. The remaining differences are ecosystem, not capability.
  • The decision. Writer engine first, catalog second, readers third: format, governance path, interop layer.
  • The catch. Someone must own compaction, version expiry, and the catalog itself, or the lake degrades within weeks.

Scope

The framework holds anywhere; the final section maps it onto Microsoft Fabric. Product statuses verified against current documentation, August 2026.

A pile of files, then a contract

Strip either format down and you find the same four layers: a catalog that turns a name into a table and points at the current version; table metadata holding schema, partitioning, and version history: which files are in the table right now; statistics and delete markers that let engines skip files and mark deleted rows in place; and plain Parquet data files: immutable, engine-neutral, identical in both formats.

The four layers of an open table formatFour tiles in a row: catalog, table metadata, statistics and deletes, Parquet data files. The first three are the format; the last is the data, identical in both.CatalogTable metadataStatistics + deletesParquet data filesa name becomes a tableschema, versions,which files are inskip files, mark rowsimmutable, engine-neutral

Fig 1. Both formats manage the same Parquet files, the solid tile; the whole debate is the three metadata layers before it.

The one difference that explains the rest

Delta Lake keeps its truth in a transaction log, a _delta_log folder inside the table folder itself. The table is self-describing. A catalog adds governance and multi-table transactions, but it is optional. Delta grew up inside Databricks and is the storage format of every Microsoft Fabric engine.

Apache Iceberg keeps its truth in the catalog, which holds the pointer to the current metadata file. No catalog, no table, and a catalog outage is a data outage. Iceberg grew up at Netflix so many engines could share one lake, and it is the open format Snowflake, AWS, and Google BigQuery write natively.

Almost every practical difference falls out of it. Delta tables travel well: the log rides along in the folder and file paths are normally relative to the table root, so copies and storage shortcuts just work. Iceberg references files by absolute path, so a copied table folder is unreadable until its writer rewrites the metadata; a v4 relative-path proposal is only now addressing this. Lock-in lands in different places too: Delta's in the platform, where the deepest features ship first; Iceberg's in the catalog, where the REST spec standardises the wire but the vendor keeps governance.

Capability no longer separates them. Iceberg's v3 spec added deletion vectors, row lineage, and a variant type for semi-structured data, exactly the features Delta advocates used to cite. Delta answered with UniForm (GA), which writes Iceberg metadata alongside the Delta log so Snowflake and BigQuery can read a Delta table as Iceberg. By 2026 the honest comparison is boring, and that is the point.

What a table format fixes

Six failures arrive on schedule in every lake without one.

1

Without

A job fails halfway and readers see half-written data

With

Atomic commits: readers see old or new, never a mix

2

Without

A column changes upstream and reports break silently

With

Schema is versioned and enforced; evolution is explicit

3

Without

Deleting one customer for privacy means rewriting terabytes

With

Row-level deletes mark rows; the files stay put

4

Without

A bad load overwrites good data with no way back

With

Every commit is a version: time travel, audit, rollback

5

Without

Queries list thousands of files and scan most of them

With

Per-file statistics skip what the engine does not need

6

Without

Two teams write the same folder and corrupt it

With

Optimistic concurrency detects the conflict and rejects one write

The cost

These guarantees are rented, and the rent is maintenance. Small files must be compacted, old versions expired, and the catalog run like the production system it is. A table format without an owner degrades within weeks, into slow queries and runaway storage rather than a clean error.

Same capabilities, different neighbourhoods

With capability converged, you are choosing between ecosystems. Five questions capture what differs.

QuestionDelta LakeApache Iceberg
Who writes it natively?Microsoft Fabric (every engine), Databricks, Apache SparkSnowflake, AWS (Glue, Athena, EMR), Google BigQuery, Spark, Flink, Trino
Does it need a catalog?No. The log in the folder is the truth; a catalog adds governanceYes. The catalog is the truth; its outage is a data outage
Can the table be moved?Yes. Relative paths mean copies and shortcuts just workOnly by its writer. Absolute paths make copied folders unreadable
How do other engines read it?UniForm or OneLake generate Iceberg metadata for Iceberg readersAny engine that speaks the Iceberg REST catalog protocol
Where is the lock-in?The platform: deepest features live in Databricks and FabricThe catalog: the REST spec standardises the wire, the vendor keeps governance

"Iceberg means no lock-in" is the most repeated half-truth here. The REST catalog spec makes engines interchangeable, and Apache Polaris graduating to a top-level Apache project (Feb 2026) gives it a vendor-neutral home, but governance, credentials, and access policy live in whichever catalog you commit to, and migrating catalogs takes quarters. You do not escape lock-in by choosing Iceberg. You move it.

Three questions that choose the format

Do not choose a format. Answer three questions in order; only one is about the format at all.

1. Which engine writes the table? Its native format wins. Fighting the writer means a translation layer on every commit, and translation layers are where consistency bugs live.

2. Which catalog governs it? The ten-year decision, longer-lived than the format. It sets governance, credential flow, and who can add a writer later.

3. Who must read it without a copy? This picks the interop layer, never the format. One writer per table; everyone else reads a projection.

If your estate looks like thisPick
Fabric or Databricks does the writingDelta. Serve Iceberg readers through UniForm or OneLake's virtual Iceberg metadata
Snowflake, AWS, or Google does the writingIceberg. The only open format those platforms write natively
Many engines, no dominant platformIceberg plus a vendor-neutral REST catalog such as Apache Polaris. The one case where Iceberg wins on merit alone
Two platforms both want to write the same tablesNot a format problem. Fix ownership first: one writer per table

In Microsoft Fabric the format is already decided

Every Fabric engine writes Delta to OneLake: Spark, Warehouse, pipelines, mirroring. The SQL analytics endpoint and Direct Lake read Delta only. You do not get a format vote: the decision moves to question three. Three paths cover it.

  • An Iceberg reader needs Fabric data. OneLake generates virtual Iceberg metadata for Delta tables (preview, Jul 2025) and exposes a read-only Iceberg REST catalog endpoint (GA, Feb 2026), so Snowflake, PyIceberg, or DuckDB reads Fabric tables without a copy.
  • An Iceberg writer feeds Fabric. Shortcuts to Iceberg tables, and Snowflake databases writing Iceberg straight into OneLake, get virtual Delta metadata automatically; catalog mirroring spans Snowflake Iceberg (Jul 2026), AWS Glue (preview, Jul 2026), and Dremio (preview, Apr 2026).
  • Databricks writes, Fabric reads. Mirror the Unity Catalog into Fabric (GA, Jul 2025), or let Azure Databricks store Unity Catalog managed tables directly in OneLake (preview, Jun 2026).

Three guardrails keep those paths out of trouble.

  • One writer engine per table. Deletion vectors are on by default in Spark Runtime 2.0, and no Python notebook engine (delta-rs, DuckDB, Polars) can write to a table that has them enabled.
  • Incoming Iceberg has a spec sheet. Tables must be Iceberg v2 (v3 is not yet supported, so tables using v3 deletion vectors will not convert), carry fewer than 5,000 commits, update no more often than every two minutes, and be reachable without private links. All documented as temporary; all real today.
  • Maintenance still needs an owner. OPTIMIZE and VACUUM need a schedule, with retention longer than your slowest reader's lag; the playbook is in The Five Levers.

The bottom line

The format debate is loud, but the load-bearing decisions sit on either side of it. Below it, your Parquet files are identical either way; above it, the writer picks the format and the catalog outlives both. Spend the argument where it pays: name one writer per table, commit to a catalog you can live with for a decade, and treat every other engine as a reader of a projection. Teams fighting about Delta versus Iceberg are usually having a proxy war over table ownership, and that war has no format-shaped solution.