SAMSKARA

ArrowLake

A DuckDB + Iceberg lakehouse, with no separate cluster to operate.

ArrowLake gives you a real Iceberg catalog on your own object storage, queried through DuckDB — no Spark cluster, no separate metastore, no dedicated query service beyond SAMSKARA itself.

Book a DemoDownload Community EditionComing Soon
ArrowLake table view showing generated read/write snippets and Iceberg snapshot history with row counts
Real snapshot history for a weather ArrowLake table — every write is a new Iceberg snapshot.

DuckDB as the query engine

Every ArrowLake table is queryable through DuckDB — in SQL Workbench, in notebooks via sm.sql_arrowdelta, or through any DuckDB-compatible tool. No separate query service to run.

Apache Iceberg as the table format

Writes go through sm.write_arrowdelta / sm.merge_arrowdelta and land as real Iceberg tables — schema evolution, partitioning, and snapshot isolation included, not bolted on after the fact.

Your object storage

Data lives in S3, GCS, or any S3-compatible storage you already run. ArrowLake is the catalog and query layer on top — it never becomes the thing holding your data hostage.

SQL catalog, multi-profile

Each ArrowLake profile gets its own catalog namespace, attachable to any project. SQL Workbench browses catalog → namespace → table across every profile a project is linked to.

Time travel, for real

sm.read_arrowdelta accepts as_of or snapshot_id. Every write is a new Iceberg snapshot — audit a table's history or reproduce a run exactly as it looked at execution time.

No separate lakehouse infrastructure

No Spark cluster, no separate metastore, no dedicated query engine to provision on top of what you already run. ArrowLake runs inside the same SAMSKARA backend that executes your notebooks.

A few lines, not a platform migration

From inside any SAMSKARA notebook:

sm.write_arrowdelta(df, "bronze.weather.readings", mode="append")

# Time travel — read the table as it looked yesterday
yesterday = sm.read_arrowdelta("bronze.weather.readings", as_of="2026-07-31")

# Query it directly with SQL
sm.sql_arrowdelta("SELECT station, avg(temp_c) FROM bronze.weather.readings GROUP BY station")

See ArrowLake on your own data

Book a DemoDownload Community EditionComing Soon