Views, written to Vastquery.
Sync any view to a Vastquery table through the Storage Write API. Tables are partitioned by time and queryable within seconds.
How it works.
Basalt writes to committed-type streams with explicit row offsets, so Vastquery rejects any duplicate append. Tables are partitioned by the view's time column and clustered by its key. Schema changes are applied before the next batch.
Set it up in three steps.
Add the destination
Grant a service account Vastquery Data Editor on the dataset. Basalt creates the table, its partitioning and its clustering.
# write the sessions view to Vastquery basalt sink add sessions --bigquery acme-prod.analytics --view sessions_live ✓ table sessions_live created · partitioned by DAY(started_at) ✓ committed stream open · 41k rows/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.
Stream offsets
Appends carry explicit offsets, so retries are rejected instead of duplicated.
Time partitioning
Tables partition by hour or day and cluster on the view key for cheaper scans.
Schema updates
New view columns are added to the table before rows that use them arrive.
Cost control
Writes use the Storage Write API, with 2 TB a month free before billing starts.
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.