Skip to content

Open Table Formats Comparison

Delta Lake vs. Apache Iceberg vs. Apache Hudi


Overview

Open Table Formats (OTFs) are the enabling technology for Lakehouse architectures. They bring database-like capabilities (ACID transactions, schema enforcement, time travel) to object storage. This document provides a comprehensive comparison of the three major OTFs to guide architectural decisions.


Quick Comparison Matrix

FeatureDelta LakeApache IcebergApache Hudi
Project OriginDatabricks (2017)Netflix (2018)Uber (2016)
Apache StatusIncubating (2024)Top-level (2020)Top-level (2020)
Primary LanguageScala + PythonJavaJava
Ecosystem TiesDatabricks firstBroad adoptionStreaming focus
MaturityVery matureMatureMature
Best ForDatabricks, concurrencyMulti-cloud, high partitionsStreaming, CDC, upserts

Detailed Feature Comparison

Core Capabilities

CapabilityDelta LakeApache IcebergApache Hudi
ACID TransactionsFullFullFull
Schema EnforcementYesYesYes
Schema EvolutionYesYesYes
Time TravelYes (excellent)YesYes
Concurrency ModelOptimistic (fine-grained)Optimistic (metadata)Optimistic (locks)
Partition EvolutionYesYesYes
Hidden PartitioningYesYesNo

Write Patterns

PatternDelta LakeApache IcebergApache Hudi
AppendExcellentExcellentExcellent
Batch UpsertGood (deletion vectors)GoodExcellent (MOR)
Streaming UpsertGoodGoodExcellent
DeleteExcellent (deletion vectors)GoodExcellent (MOR)
CDCGoodGoodExcellent

Metadata Handling

AspectDelta LakeApache IcebergApache Hudi
Metadata Location_delta_log/ JSONmetadata/ JSON.hoodie/
Listing PerformanceGoodExcellent (manifests)Good
High Partition CountGoodExcellent (best)Good
MetastoreFile-based or UnityFile-based or HiveFile-based or Hive
Catalog SupportUnity, Glue, HiveGlue, Hive, customGlue, Hive

Performance Characteristics

MetricDelta LakeApache IcebergApache Hudi
Write SpeedFastFastModerate
Read SpeedFastFastFast
Merge/UpsertVery fast (deletion vectors)FastFast (MOR tables)
CompactionAutomatic (OPTIMIZE)Manual (rewrite)Automatic (MOR)
Query PlanningFastVery fast (high partitions)Fast

Architecture Comparison

Delta Lake Architecture

Key characteristics:

  • Transaction log as single source of truth
  • Checkpoint files for faster log replay
  • Deletion vectors for efficient updates/deletes
  • Optimized for high concurrency
  • Deep Spark integration

Strengths:

  • Best Spark integration
  • Deletion vectors (major performance win)
  • Best for Databricks workloads
  • Strong concurrency control
  • Excellent time travel

Weaknesses:

  • Databricks origin (perceived vendor tie)
  • Less community diversity vs. Iceberg
  • Historically less focus on non-Spark engines

Apache Iceberg Architecture

Key characteristics:

  • Manifest-based metadata (extremely scalable)
  • No lock reads (metadata is immutable)
  • Best for high partition counts
  • Strong community, multi-cloud adoption
  • Vendor-neutral design

Strengths:

  • Best metadata scalability (millions of partitions)
  • Strongest community diversity (Snowflake, Databricks, BigQuery all support)
  • Vendor-neutral, no lock-in concerns
  • Excellent for non-Spark engines (Trino, BigQuery)
  • Hidden partitioning (no partition columns in queries)

Weaknesses:

  • Less mature write optimization vs. Delta
  • Fewer performance features (no deletion vectors yet)
  • More complex to set up initially

Apache Hudi Architecture

Key characteristics:

  • Table type choice (COW vs. MOR)
  • Built for streaming and upsert workloads
  • Built-in compaction and management
  • Timeline-based operations

Strengths:

  • Best for streaming and CDC workloads
  • MOR tables enable fast upserts
  • Built-in compaction (less operational overhead)
  • Strong for real-time use cases
  • HoodieCli for management operations

Weaknesses:

  • More complex (two table types)
  • Smaller community vs. Delta/Iceberg
  • More operational complexity (compaction tuning)
  • Less adoption in pure batch workloads

Table Type Deep Dive (Hudi)

Copy-on-Write (COW)

Characteristics:

  • Updates rewrite entire Parquet files
  • Reads: Parquet only (fast)
  • Writes: Slower due to rewrite
  • Best for: Read-heavy, write-light workloads

Performance:

  • Write latency: High (rewrite cost)
  • Read latency: Low (Parquet only)
  • Storage: Higher (version files)

Merge-on-Read (MOR)

Characteristics:

  • Updates append to log files (fast)
  • Reads: Merge base + log (slower) or base-only (faster)
  • Compaction merges logs into base files
  • Best for: Write-heavy, streaming workloads

Performance:

  • Write latency: Low (append only)
  • Read latency: Medium (merge overhead) to Low (read-optimized view)
  • Storage: Medium (logs + base)

Selection Framework

Decision Tree

Selection by Use Case

Use CaseRecommendedRationale
Databricks PlatformDelta LakeNative support, best integration, deletion vectors
SnowflakeIceberg or DeltaBoth supported, Iceberg more vendor-neutral
BigQueryIcebergNative support, optimized
Pure Spark (OSS)Delta or IcebergDelta for features, Iceberg for community
Trino/PrestoIcebergBest support, metadata scalability
Streaming + UpsertsHudi MORBuilt for streaming, fast upserts
CDC PipelinesHudi or DeltaHudi for pure streaming, Delta with Structured Streaming
High Partition CountIcebergBest metadata scalability
Multi-cloud StrategyIcebergMost vendor-neutral
Real-time PersonalizationHudi MORFast writes, fast enough reads
Batch ETLDelta or IcebergBoth excellent, Delta faster merges

Performance Benchmarks

Write Performance

OperationDelta LakeIcebergHudi COWHudi MOR
Append (100M rows)2.0x2.1x2.0x2.2x
Merge (10M upserts)1.0x (baseline)1.3x0.8x1.5x
Delete (10M rows)1.0x (baseline)1.4x0.9x1.2x
CDC (continuous)GoodGoodN/AExcellent

Relative to Delta Lake baseline. Higher = slower. Hudi MOR writes are fastest.

Read Performance

OperationDelta LakeIcebergHudi COWHudi MOR (RO)
Full scan1.0x1.05x1.0x1.0x
Filtered scan1.0x1.0x1.0x1.0x
Point lookup1.0x1.0x1.0x1.1x
Time travel1.0x1.1x1.2x1.2x

All formats have excellent read performance. Delta has edge in time travel.

Query Planning (Metadata Operations)

Partition CountDelta LakeIcebergHudi
10010ms8ms12ms
1,00050ms15ms80ms
10,000500ms25ms800ms
100,0005000ms50msN/A
1,000,000N/A100msN/A

Iceberg dominates at high partition counts due to manifest-based metadata.


Cost Implications

Storage Costs

ScenarioDelta LakeIcebergHudiNotes
Append-onlyBaselineBaselineBaselineMinimal difference
Heavy updates+20% (deletion vectors)+40% (rewrite)+30% (COW) / +15% (MOR)Hudi MOR most storage-efficient
Time travel retention+10-30%+10-30%+15-40%Configurable retention

Compute Costs

OperationDelta LakeIcebergHudiNotes
Batch ETLBaseline+5%+10%Delta has best Spark optimization
Streaming writesBaseline+5%-10% (MOR)Hudi MOR fastest for streaming
Merge operationsBaseline+20%-20% (MOR)Deletion vectors make Delta fast, Hudi faster
Query planning1.0x0.3x (high partitions)2.0x (high partitions)Iceberg wins at scale

Operational Costs

AreaDelta LakeIcebergHudi
CompactionManual (OPTIMIZE)Manual (rewrite)Automatic (MOR)
Vacuum/CleanupManual (VACUUM)Manual (expire_snapshots)Automatic (cleaner)
MonitoringRequiredRequiredRequired
Ops effortMediumMediumLow (Hudi auto-manages)

Implementation Considerations

Migration Complexity

FromTo Delta LakeTo IcebergTo Hudi
Hive tablesEasy (CONVERT TO DELTA)Easy (migrate procedure)Medium (bulk_insert)
WarehouseMediumMediumMedium
Delta LakeN/AEasyMedium
IcebergEasyN/AMedium
HudiMediumMediumN/A

Ecosystem Support

Tool / PlatformDelta LakeIcebergHudi
DatabricksNativeVia Unity CatalogSupported
SparkExcellentExcellentExcellent
Trino/PrestoGoodExcellentGood
FlinkGoodGoodExcellent
BigQueryPlannedNativeNo
SnowflakeSupportedNativeNo
RedshiftNoVia SpectrumNo
Pandas/PolarsGoodGoodPoor

Community & Maturity

MetricDelta LakeIcebergHudi
GitHub Stars6.5K5.5K4.8K
Contributors400+350+250+
AdoptionVery highVery highMedium
Vendor SupportDatabricks, Microsoft, GoogleAWS, Google, Adobe, NetflixUber, Amazon (EMR)

Code Examples

Delta Lake

-- Create table
CREATE TABLE sales (
id BIGINT,
customer_id BIGINT,
amount DECIMAL(10,2),
sale_date DATE
) USING DELTA;
-- Upsert
MERGE INTO sales target
USING updates source
ON target.id = source.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
-- Time travel
SELECT * FROM sales VERSION AS OF 123;
SELECT * FROM sales TIMESTAMP AS OF '2025-01-26';
-- Optimize
OPTIMIZE sales WHERE sale_date >= '2025-01-01';
-- Vacuum
VACUUM sales RETAIN 30 HOURS;

Apache Iceberg

-- Create table
CREATE TABLE sales (
id BIGINT,
customer_id BIGINT,
amount DECIMAL(10,2),
sale_date DATE
) USING ICEBERG
PARTITIONED BY (days(sale_date));
-- Upsert
MERGE INTO sales target
USING updates source
ON target.id = source.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
-- Time travel
SELECT * FROM sales VERSION AS OF 123;
SELECT * FROM sales TIMESTAMP AS OF '2025-01-26';
-- Rewrite (compact)
CALL catalog.rewrite_data_files('db.sales');
-- Expire snapshots
CALL catalog.expire_snapshots('db.sales', TIMESTAMP '2025-01-01 00:00:00');

Apache Hudi

-- Create COW table
CREATE TABLE sales (
id BIGINT,
customer_id BIGINT,
amount DECIMAL(10,2),
sale_date DATE
) USING HUDI
OPTIONS (
type = 'cow',
primaryKey = 'id',
preCombineField = 'sale_date'
);
-- Create MOR table
CREATE TABLE sales_mor (
id BIGINT,
customer_id BIGINT,
amount DECIMAL(10,2),
sale_date DATE
) USING HUDI
OPTIONS (
type = 'mor',
primaryKey = 'id',
preCombineField = 'sale_date'
);
-- Upsert
INSERT INTO sales VALUES (...);
INSERT INTO sales VALUES (...); -- Automatic upsert on pk
-- Time travel
SELECT * FROM sales WHERE `_hoodie_commit_time` <= '20250126120000';
-- Compaction (MOR)
CALL run_compaction('db.sales');

Senior Level Recommendations

For Greenfield Projects

ScenarioRecommendation
Databricks shopDelta Lake (native, deletion vectors)
Multi-cloud strategyIceberg (vendor-neutral)
Streaming-firstHudi MOR (built for streaming)
UncertainIceberg (safest long-term bet)
Snowflake + SparkIceberg (supported on both)

For Brownfield (Existing Projects)

FromToRecommendation
Hive on S3Any OTFDelta (easiest migration)
Redshift/SnowflakeLakehouseIceberg (vendor-neutral)
Databricks DeltaOpen sourceStay with Delta OSS
On-prem HadoopCloudIceberg or Hudi (CDC capability)

Strategic Considerations

  1. Vendor lock-in: Iceberg is most vendor-neutral
  2. Databricks investment: Delta is optimized for Databricks
  3. Streaming requirements: Hudi MOR is purpose-built
  4. Community momentum: Iceberg has most diverse adoption
  5. Skill availability: Delta has most Spark developers

Key Takeaways

  1. All three are production-ready: No wrong choice among the three
  2. Delta Lake: Best for Databricks, high concurrency, fastest merges
  3. Iceberg: Best for multi-cloud, high partition counts, vendor neutrality
  4. Hudi: Best for streaming, CDC, and upsert-heavy workloads
  5. Migration is possible: Can migrate between formats (not trivial)
  6. Coexistence is possible: All three can coexist in same platform
  7. Cost difference is minimal: Storage costs similar, compute varies by workload

Next: Storage Formats Deep Dive