Views, streamed into Snowflake.
Send any Basalt view to a Snowflake table. Rows arrive through Snowpipe Streaming in seconds, with no warehouse running for the load.
Send any Basalt view to a Snowflake table. Rows arrive through Snowpipe Streaming in seconds, with no warehouse running for the load.
Basalt opens a Snowpipe Streaming channel per view partition and writes rows with offset tokens. Snowflake commits each batch with its token, so a restart resumes from the last committed row with no duplicates.
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 Snowflake basalt sink add revenue --snowflake ANALYTICS.PUBLIC --view revenue_by_min
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"
Each channel commits with a token, so a retry never writes the same row twice.
Snowpipe Streaming writes rows directly. You pay for storage, not a running warehouse.
Columns map to NUMBER, VARCHAR, TIMESTAMP_TZ and VARIANT from the view schema.
Keyed views can merge into a target table on a schedule as short as one minute.