Pinecone indexes, kept in sync.
Map a view's vector column to a Pinecone index. Inserts and updates upsert within seconds, and deletes remove the vector.
Map a view's vector column to a Pinecone index. Inserts and updates upsert within seconds, and deletes remove the vector.
Basalt reads the view's change feed and upserts vectors by row key into the namespace you choose. Other columns are sent as metadata for filtering. Deletes in the view become deletes in the index.
Paste a Pinecone API key and name an existing serverless index. Basalt checks that dimensions match before the first upsert.
# sync product embeddings to Pinecone basalt sink add catalog --pinecone products-prod --view product_vectors --namespace 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"
Vectors are keyed by row ID, so retries overwrite instead of duplicating.
Pick columns to send as metadata for filtered queries in Pinecone.
Rows removed from the view are deleted from the index within seconds.
Route tenants or environments to separate namespaces from one view.