Views, committed to Iceberg.
Write any view to an Apache Iceberg table in your own bucket. Each commit is an atomic snapshot that Spark, Trino and Snowflake can read.
Write any view to an Apache Iceberg table in your own bucket. Each commit is an atomic snapshot that Spark, Trino and Snowflake can read.
Basalt writes Parquet data files to your bucket and commits them through a REST, Glue or Nessie catalog. Each commit records the source offsets in snapshot properties, so a retried commit is detected and skipped.
Point Basalt at your catalog and give it write access to the warehouse bucket. Basalt creates the table with the view's schema and partition spec.
# commit the orders view to a Glue-catalog table basalt sink add orders --iceberg glue://lake.orders --view orders_enriched
Write plain SQL over the source. Basalt keeps the view current with every record and tracks lineage back to the topic, partition and offset.
CREATE MATERIALIZED VIEW revenue_by_min AS SELECT date_trunc('minute', ts) AS minute, currency, sum(amount) AS revenue, count(*) AS payments FROM payments WHERE status = 'captured' GROUP BY 1, 2;
Every view is an endpoint the moment it exists. Call it over REST, connect with any Postgres client, or use the SDK from your app.
curl https://api.basalt.dev/v1/views/revenue_by_min?limit=5 \ -H "Authorization: Bearer $BASALT_TOKEN"
Every batch is one snapshot. Readers never see a partial write.
Works with the REST catalog, AWS Glue, Nessie and Polaris.
Small files are rewritten on a schedule so query engines scan fewer objects.
Query any past snapshot by ID or timestamp from your engine of choice.