+
VectorFin
Self-serve setup + 1× support grant

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.

20 min
Setup time
7
Iceberg tables
5K+
US tickers
Nightly
Updates

Prerequisites

📋VectorFin Pro plan
🔑API key from app.vectorfinancials.com
☁️Snowflake account

Connection Guide

1

Provision a Polaris credential

In the VectorFin dashboard → Data Access → Provision. Copy the catalog URI, warehouse, client_id, and the client_secret (shown ONCE).

sql
-- 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>
2

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.

sql
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.com
3

Email 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.

bash
# 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'
4

Register the Polaris CATALOG INTEGRATION

Once the grant is in place, point Snowflake at the Polaris REST catalog using your client credentials.

sql
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;
5

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.

sql
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)
sql
CATALOG_NAMESPACE = 'vectorfin.embeddings', CATALOG_TABLE_NAME = 'transcripts'
vectorfin.embeddings.filingsSEC filing section embeddings
sql
CATALOG_NAMESPACE = 'vectorfin.embeddings', CATALOG_TABLE_NAME = 'filings'
vectorfin.signals.whystock_scoreComposite quant score (0–100)
sql
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'whystock_score'
vectorfin.signals.regimeMarket regime classification
sql
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'regime'
vectorfin.signals.volatilityGARCH volatility forecasts
sql
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'volatility'
vectorfin.signals.sentiment_driftEarnings sentiment drift
sql
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'sentiment_drift'
vectorfin.signals.anomalyAnomaly scores and flags
sql
CATALOG_NAMESPACE = 'vectorfin.signals', CATALOG_TABLE_NAME = 'anomaly'

Start querying in 20 minutes

Sign up for VectorFin and get immediate API access.