Skip to content
Apache Iceberg

Two table formats, one SQL engine

DeltaForge reads native Iceberg tables and writes Delta tables with Iceberg metadata via UniForm. The same SQL dialect, the same optimizer, and the same ODBC driver work across both formats.

Native Iceberg reader across format versions
UniForm writer: Delta tables readable as Iceberg
Cross-format joins in a single query
metadata.json schema, partition spec, snapshots Manifest List (.avro) one snapshot, points to manifests added: 12 | deleted: 2 manifest-a.avro date=2024-06 | 4 files 2.1M rows manifest-b.avro date=2024-07 | 6 files 3.4M rows manifest-c.avro date=2024-08 | 3 files 1.8M rows data-001 .parquet data-002 .parquet data-003 .parquet data-004 .parquet data-005 .parquet CATALOG SNAPSHOTS MANIFESTS DATA FILES

Two directions of Iceberg support

Read and write, not just one or the other

Native Iceberg reader

DeltaForge reads tables written by other Iceberg-compatible engines. The same SQL dialect, predicate pushdown, and column pruning that works on Delta tables also works on Iceberg tables. Query both in one statement.

UniForm writer

Enable UniForm on a Delta table and DeltaForge writes Iceberg metadata (metadata.json, manifest list, manifests) on every commit. Delta readers and Iceberg readers see the same physical Parquet files. No ETL, no data duplication.

Cross-format joins

Join a Delta table and an Iceberg table in one query. Predicate pushdown reaches into each format's native metadata layer independently.

SELECT d.order_id, i.status FROM delta.warehouse.orders d JOIN iceberg.warehouse.shipments i ON d.order_id = i.order_id

Shared SQL surface

No mode switching, no separate catalog, no connector configuration. Register a storage credential, point at the table path, and use the same SELECT, INSERT, ALTER TABLE, and time travel syntax.

UniForm in depth

Write Delta, expose Iceberg, no pipeline in between

How a commit works

A SQL write commits a Delta log entry. DeltaForge then generates the corresponding Iceberg metadata inline: metadata.json, a manifest list, and one manifest per partition. Both metadata layers reference the same Parquet files.

Who benefits

Teams that use DeltaForge for writes and maintenance, while downstream consumers use an Iceberg-compatible engine for reads. Gradual migration from Delta to Iceberg without rewriting existing pipelines.

Enable it

One table property activates UniForm on an existing Delta table. All subsequent commits produce both sets of metadata automatically.

ALTER TABLE events SET TBLPROPERTIES ( 'delta.universalFormat.enabledFormats' = 'iceberg' )

Data skipping on Iceberg tables

Multi-level skipping from partition to file to row

Partition pruning

Predicates on partition columns eliminate entire partitions from scan. The manifest list carries partition summaries so irrelevant manifests are skipped without opening them.

File-level statistics

Each manifest records column-level min/max bounds per data file. The optimizer uses these to skip files that cannot contain rows matching the query predicate.

Column pruning

Only columns referenced in the query are read from Parquet. Iceberg's field ID system ensures correct mapping even after renames or reorders.

Open formats, one engine

Native Iceberg and Delta Lake in the same SQL engine. Your data, your format, your choice.