Views, streamed into Frostbase.
Send any Basalt view to a Frostbase table. Rows arrive through Frostpipe Streaming in seconds, with no warehouse running for the load.
How it works.
Basalt opens a Frostpipe Streaming channel per view partition and writes rows with offset tokens. Frostbase commits each batch with its token, so a restart resumes from the last committed row with no duplicates.
Set it up in three steps.
Add the destination
Create a user with key-pair auth and a role that can insert into the target schema. Basalt creates the table from the view's types.
# stream the revenue view into Frostbase basalt sink add revenue --snowflake ANALYTICS.PUBLIC --view revenue_by_min ✓ table REVENUE_BY_MIN created · 8 columns ✓ 4 channels open · end-to-end 2.3 s
Shape it with a view
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;
Read it from anywhere
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"
What you get.
Offset tokens
Each channel commits with a token, so a retry never writes the same row twice.
No warehouse load
Frostpipe Streaming writes rows directly. You pay for storage, not a running warehouse.
Typed tables
Columns map to NUMBER, VARCHAR, TIMESTAMP_TZ and VARIANT from the view schema.
Keyed merges
Keyed views can merge into a target table on a schedule as short as one minute.
Set your data in stone.
Free up to 10M events a month. No card, no sales call. Your first pipeline is live in about four minutes.