R2 Data Catalog: Bring Your Own Engine

2026-01-27PresentP
R2 Data Catalog
Bring Your Own EngineR2 Data Catalog
Cloudflare

Connect Any Iceberg-Compatible Engine

Standard REST Catalog API means you're never locked in to a single tool

Apache Spark
Apache Spark
Big data processing
Popular
DuckDB
DuckDB
Fast local analytics
Popular
PyIceberg
PyIceberg
Python native access
Snowflake
Snowflake
Enterprise warehouse
Trino
Trino
Distributed SQL
StarRocks
StarRocks
Real-time analytics
Databricks
Databricks
Unified analytics
R2 SQL
R2 SQL
Cloudflare native
New
PyIcebergPyIceberg
from pyiceberg.catalog.rest import RestCatalog
catalog = RestCatalog(
name="r2_catalog",
uri="https://<CATALOG_URI>",
warehouse="<WAREHOUSE>",
credential="<API_TOKEN>"
)
# List all tables
for table in catalog.list_tables("default"):
print(table)
# Query with PyArrow
table = catalog.load_table("default.events")
df = table.scan().to_pandas()
DuckDBDuckDB
-- Attach R2 Data Catalog
ATTACH 'r2://<WAREHOUSE>' AS r2_warehouse (
TYPE ICEBERG,
ENDPOINT '<CATALOG_URI>',
TOKEN '<API_TOKEN>'
);
-- Query directly from R2
SELECT
event_type,
COUNT(*) as events
FROM r2_warehouse.default.events
WHERE event_time > '2025-01-01'
GROUP BY event_type;