Views, written to BigQuery.
Sync any view to a BigQuery table through the Storage Write API. Tables are partitioned by time and queryable within seconds.
Sync any view to a BigQuery table through the Storage Write API. Tables are partitioned by time and queryable within seconds.
Basalt writes to committed-type streams with explicit row offsets, so BigQuery 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.
Grant a service account BigQuery Data Editor on the dataset. Basalt creates the table, its partitioning and its clustering.
# write the sessions view to BigQuery basalt sink add sessions --bigquery acme-prod.analytics --view sessions_live
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"
Appends carry explicit offsets, so retries are rejected instead of duplicated.
Tables partition by hour or day and cluster on the view key for cheaper scans.
New view columns are added to the table before rows that use them arrive.
Writes use the Storage Write API, with 2 TB a month free before billing starts.