---
title: "Apache Iceberg"
description: "Apache Iceberg is an open table format that adds ACID transactions, schema evolution, and time travel to large analytic tables stored as files in a data lake."
canonical: "https://motherduck.com/glossary/apache-iceberg/"
related:
  - title: "Apache Iceberg | MotherDuck Docs"
    url: "https://motherduck.com/docs/integrations/file-formats/apache-iceberg/"
  - title: "DuckLake Architecture Deep Dive"
    url: "https://motherduck.com/blog/ducklake-architecture-deep-dive/"
  - title: "DuckDB & Iceberg : The Future of Lightweight Data Management | MotherDuck"
    url: "https://motherduck.com/videos/duckdb-iceberg-the-future-of-lightweight-data-management/"
gated_asset:
  title: "DuckLake on MotherDuck"
  url: "https://motherduck.com/product/ducklake/"
---

# Apache Iceberg

> Apache Iceberg is an open table format that adds ACID transactions, schema evolution, and time travel to large analytic tables stored as files in a data lake.

## Overview
Apache Iceberg is an open table format originally created at Netflix to fix limitations of Hive tables at scale — most notably that Hive tracks table state by listing directories, which becomes slow and unsafe with concurrent writers. Iceberg instead tracks every data file that makes up a table through a chain of metadata files: a table metadata file points to a manifest list, which points to manifest files, which list the actual data files and their statistics.

<glossary-callout guide="ducklake-lakehouse-table-format-book-full" />

## Key features
- **Snapshot isolation and ACID transactions** — every write creates a new snapshot, so readers always see a consistent view and concurrent writers can be safely reconciled.
- **Schema evolution** — columns can be added, dropped, renamed, or reordered without rewriting data files.
- **Hidden partitioning** — Iceberg tracks partition transforms (like truncating a timestamp to a day) internally, so queries filter correctly without users needing to know the physical partition layout.
- **Time travel** — you can query a table as of a past snapshot or timestamp.

## Catalogs
Iceberg tables are registered in a catalog that tracks the current metadata pointer for each table. Common catalog implementations include the Iceberg REST catalog, AWS Glue, Hive Metastore, and Nessie.

## DuckDB and Apache Iceberg
DuckDB's `iceberg` extension can read Iceberg tables directly from storage, or by attaching to a REST catalog for full catalog-aware access, including writes:

```sql
INSTALL iceberg;
LOAD iceberg;

-- Read a table directly from its metadata
SELECT * FROM iceberg_scan('s3://bucket/warehouse/orders');

-- Or attach a REST catalog for catalog-managed tables
ATTACH 'my_warehouse' AS my_iceberg (TYPE iceberg, ENDPOINT 'https://catalog.example.com');
SELECT * FROM my_iceberg.orders;
```

This lets DuckDB and MotherDuck act as a lightweight, fast query engine over Iceberg tables written by Spark, Flink, or other engines, without standing up a JVM-based cluster.