Connect Snowflake to VectorFin via Apache Polaris
Mount VectorFin tables in Snowflake via the Polaris REST catalog. Pro/Enterprise — Polaris credential is self-serve; the Snowflake EXTERNAL_VOLUME service account needs a one-time grant from VectorFin support.
Prerequisites
Connection Guide
Provision a Polaris credential
In the VectorFin dashboard → Data Access → Provision. Copy the catalog URI, warehouse, client_id, and the client_secret (shown ONCE).
-- You'll need these in the Snowflake DDL below:
-- Catalog URI: https://catalog.vectorfinancials.com/api/catalog
-- Warehouse: vectorfin
-- Client ID: <from dashboard>
-- Client Secret: <from dashboard — shown once>Create a Snowflake EXTERNAL VOLUME and capture its service account
Snowflake reads Parquet data files from VectorFin's GCS bucket via an EXTERNAL VOLUME. After CREATE, run DESC EXTERNAL VOLUME to get the autogenerated GCS service account email — you'll send it to VectorFin support next.
CREATE OR REPLACE EXTERNAL VOLUME vf_gcs_volume
STORAGE_LOCATIONS = (
(
NAME = 'vf-gcs-us'
STORAGE_PROVIDER = 'GCS'
STORAGE_BASE_URL = 'gcs://vectorfinancials-data/warehouse/vectorfin/'
)
);
-- Snowflake-managed SA email is in the GCS_SERVICE_ACCOUNT field:
DESC EXTERNAL VOLUME vf_gcs_volume;
-- e.g. abcd1234@gcp-sa.iam.gserviceaccount.comEmail VectorFin support to grant prefix-scoped read
Send the EXTERNAL VOLUME service account email to support@vectorfinancials.com. We add a roles/storage.objectViewer binding scoped to gs://vectorfinancials-data/warehouse/vectorfin/* via an IAM Condition — your SA can't see anything outside the warehouse prefix. Turnaround: 1 business day.
# What we run on our side (for transparency):
gcloud storage buckets add-iam-policy-binding gs://vectorfinancials-data \
--member=serviceAccount:<your-snowflake-sa>@gcp-sa.iam.gserviceaccount.com \
--role=roles/storage.objectViewer \
--condition='expression=resource.name.startsWith(
"projects/_/buckets/vectorfinancials-data/objects/warehouse/vectorfin/"
),title=warehouse-prefix-only'Register the Polaris CATALOG INTEGRATION
Once the grant is in place, point Snowflake at the Polaris REST catalog using your client credentials.
CREATE OR REPLACE CATALOG INTEGRATION vectorfin_polaris
CATALOG_SOURCE = POLARIS
TABLE_FORMAT = ICEBERG
REST_CONFIG = (
CATALOG_URI = 'https://catalog.vectorfinancials.com/api/catalog'
WAREHOUSE = 'vectorfin'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_CLIENT_ID = '<your_polaris_client_id>'
OAUTH_CLIENT_SECRET = '<your_polaris_client_secret>'
OAUTH_ALLOWED_SCOPES = ('PRINCIPAL_ROLE:ALL')
)
ENABLED = TRUE;Mount tables and query
Each ICEBERG TABLE you create points at one VectorFin table. CATALOG_NAMESPACE is the Polaris namespace path; the bootstrap creates the catalog with a top-level vectorfin namespace, so subnamespaces are vectorfin.signals and vectorfin.embeddings.
CREATE OR REPLACE ICEBERG TABLE whystock_score
EXTERNAL_VOLUME = 'vf_gcs_volume'
CATALOG = 'vectorfin_polaris'
CATALOG_NAMESPACE = 'vectorfin.signals'
CATALOG_TABLE_NAME = 'whystock_score';
CREATE OR REPLACE ICEBERG TABLE transcripts
EXTERNAL_VOLUME = 'vf_gcs_volume'
CATALOG = 'vectorfin_polaris'
CATALOG_NAMESPACE = 'vectorfin.embeddings'
CATALOG_TABLE_NAME = 'transcripts';
-- Top signals last 90 days
SELECT ticker, date, score, components
FROM whystock_score
WHERE ticker = 'AAPL'
AND date >= DATEADD(day, -90, CURRENT_DATE())
ORDER BY date DESC;Available Tables
All 7 VectorFin data tables — bitemporal (effective_ts + knowledge_ts), append-only, nightly updates.
vectorfin.embeddings.transcriptsEarnings call chunk embeddings (768-dim)▼
CATALOG_NAMESPACE = 'vectorfin.embeddings', CATALOG_TABLE_NAME = 'transcripts'vectorfin.embeddings.filingsSEC filing section embeddings▼
CATALOG_NAMESPACE = 'vectorfin.embeddings', CATALOG_TABLE_NAME = 'filings'vectorfin.signals.whystock_scoreComposite quant score (0–100)▼
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'whystock_score'vectorfin.signals.regimeMarket regime classification▼
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'regime'vectorfin.signals.volatilityGARCH volatility forecasts▼
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'volatility'vectorfin.signals.sentiment_driftEarnings sentiment drift▼
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'sentiment_drift'vectorfin.signals.anomalyAnomaly scores and flags▼
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'anomaly'Related Integrations
Start querying in 20 minutes
Sign up for VectorFin and get immediate API access.