Skip to main content

DuckDB and Apache Iceberg: OLake Go guides

DuckDB attaches Iceberg REST (representational state transfer) catalogs from a single process. It is a quick way to query the tables OLake Go writes.

Short answer. To query a replicated database in DuckDB, run OLake Go with an Iceberg REST catalog such as Polaris, Lakekeeper, Unity Catalog or Horizon, or with AWS Glue. Then attach that catalog in DuckDB with the iceberg extension. Add DuckDB as a target query engine and OLake Go writes positional deletes, which DuckDB reads.

Key takeaways

  • DuckDB attaches Iceberg REST catalogs, and AWS Glue, from a single process with the iceberg extension.
  • With DuckDB as a target query engine, OLake Go writes positional deletes, which DuckDB reads.
  • Two guides end in DuckDB, such as Postgres to DuckDB, and many more use it as the cross-check reader.

Last reviewed October 2026.

How OLake Go gets data into DuckDB​

OLake Go uses change data capture (CDC) where the source has it. It commits Iceberg tables to the catalog. DuckDB reads Polaris, Lakekeeper and the vendor REST catalogs, and Glue through its own endpoint type.

Two guides end in DuckDB, and many more use it as the cross-check reader. The MySQL query engines post compares DuckDB with other readers.

When to use it​

  • You want to inspect replicated tables from a laptop or a notebook.
  • The catalog speaks the Iceberg REST protocol.

When not to use it​

  • The catalog is Hive Metastore or JDBC. DuckDB attaches REST catalogs only.
  • DuckDB is the main reader and the job uses equality deletes. The DuckDB docs do not cover equality delete reads, so prefer positional deletes.

Catalogs DuckDB reads

CatalogDuckDB readsHow
AWS GlueYesATTACH with ENDPOINT_TYPE glue (needs Lake Formation grants)
Apache PolarisYesATTACH to the REST endpoint
LakekeeperYesATTACH to the REST endpoint
Snowflake HorizonYesATTACH to the Horizon REST endpoint with a Snowflake token
Unity CatalogYesATTACH to the Unity REST endpoint (AWS-hosted workspaces)
BigLake (Google Cloud Lakehouse)YesATTACH with a Google access token
Amazon S3 TablesYesATTACH with ENDPOINT_TYPE s3_tables
Hive MetastoreNoDuckDB attaches REST catalogs only
JDBCNoDuckDB attaches REST catalogs only

Delete formats DuckDB reads

Equality deletes (v2)Positional deletes (v2)Deletion vectors (v3)
PartialYesYes

DuckDB reads positional deletes and, since duckdb-iceberg 1.5.3, deletion vectors. Equality delete reads are undocumented; they returned correct rows on the runs on this site (duckdb-iceberg 1.5.x, checked 2026-10-29), but prefer positional deletes when DuckDB is the main reader. Set DuckDB as a target query engine on the OLake Go job and OLake Go picks a format it reads; with DuckDB as the only reader that is positional deletes (v2).

Sources: DuckDB: Iceberg REST catalogs (checked 2026-10-12); DuckDB: new Iceberg features (v3 support) (checked 2026-10-12).

Tested guides for DuckDB

Guides where DuckDB reads the same tables

These pages show DuckDB reading the same tables through the same catalog, in their cross-engine section. No second copy of the data is made.

Frequently asked questions​

Does DuckDB read Iceberg deletion vectors?

Yes, since duckdb-iceberg 1.5.3.

Does DuckDB read equality deletes?

The DuckDB docs do not list it. On the runs on this site they returned correct rows with duckdb-iceberg 1.5.x, checked 2026-10-29, but positional deletes are the safer choice.

How does DuckDB attach AWS Glue?

With ATTACH and ENDPOINT_TYPE glue. The reader also needs Lake Formation grants.