Skip to content

Snowflake Integration

Connect Snowflake tables and views to Resplendent to use them in your dashboards and reports. Syncs run queries on the Snowflake warehouse you choose and use its compute credits.

You’ll need a Snowflake administrator to create a service user with read access to your data. You can connect with a key pair or a programmatic access token.

Have your warehouse, database, and schema names ready. Copy the names as they appear in Snowflake, including capitalization.

To find your account identifier, run this in a Snowflake worksheet:

SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME() AS account_identifier;

Use the result, such as MYORG-ANALYTICS, in Resplendent’s Account identifier field. Leave off https:// and .snowflakecomputing.com. See Snowflake’s connection settings guide for other account formats.

Ask your Snowflake administrator to run the following SQL with a role that can create users and grant these permissions. Replace <your_warehouse>, <your_database>, and <your_schema> with the exact names stored in Snowflake, keeping the surrounding double quotes.

Names created without quotes are stored in uppercase, so use "COMPUTE_WH" for a warehouse created as compute_wh. If a name contains a double quote, double it inside the SQL identifier: Sales"West becomes "Sales""West". See Snowflake’s identifier rules.

CREATE ROLE IF NOT EXISTS RESPLENDENT_SYNC_ROLE;
GRANT USAGE ON WAREHOUSE "<your_warehouse>" TO ROLE RESPLENDENT_SYNC_ROLE;
GRANT USAGE ON DATABASE "<your_database>" TO ROLE RESPLENDENT_SYNC_ROLE;
GRANT USAGE ON SCHEMA "<your_database>"."<your_schema>" TO ROLE RESPLENDENT_SYNC_ROLE;
GRANT SELECT ON ALL TABLES IN SCHEMA "<your_database>"."<your_schema>" TO ROLE RESPLENDENT_SYNC_ROLE;
GRANT SELECT ON ALL VIEWS IN SCHEMA "<your_database>"."<your_schema>" TO ROLE RESPLENDENT_SYNC_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA "<your_database>"."<your_schema>" TO ROLE RESPLENDENT_SYNC_ROLE;
GRANT SELECT ON FUTURE VIEWS IN SCHEMA "<your_database>"."<your_schema>" TO ROLE RESPLENDENT_SYNC_ROLE;
CREATE USER IF NOT EXISTS RESPLENDENT_SYNC
TYPE = SERVICE
DEFAULT_ROLE = RESPLENDENT_SYNC_ROLE
DEFAULT_WAREHOUSE = "<your_warehouse>";
GRANT ROLE RESPLENDENT_SYNC_ROLE TO USER RESPLENDENT_SYNC;

These permissions let Resplendent read existing tables and views, along with any created later in that schema. For another schema, repeat the USAGE ON SCHEMA grant and the four SELECT grants with its name.

Choose one of the following methods for the service user.

Generate a private key and its public key on your computer:

Terminal window
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

Keep rsa_key.p8 private. You’ll upload it to Resplendent when you connect. If your organization requires an encrypted private key, follow Snowflake’s key-pair setup instructions and enter its passphrase in Resplendent.

Open rsa_key.pub and copy the key body, leaving out the BEGIN PUBLIC KEY and END PUBLIC KEY lines. Register it on the service user:

ALTER USER RESPLENDENT_SYNC SET RSA_PUBLIC_KEY='<paste_public_key_body_here>';

Ask your administrator to confirm that the service user’s authentication policy allows programmatic access tokens. Snowflake requires a network policy for service-user tokens by default; your account’s authentication policy controls that requirement. If a network policy applies, it must allow connections from Resplendent’s servers. Contact support@resplendentdata.com for the current IP addresses.

Create a token restricted to the read-only role:

ALTER USER RESPLENDENT_SYNC ADD PROGRAMMATIC ACCESS TOKEN resplendent
ROLE_RESTRICTION = 'RESPLENDENT_SYNC_ROLE'
DAYS_TO_EXPIRY = 90;

Choose an expiry allowed by your authentication policy. Copy the token from the results immediately, since Snowflake displays it once. See Snowflake’s token guide for policy requirements.

Before the token expires, create a replacement with a new name and update the token in your Resplendent connection. After the connection succeeds, remove the old token:

ALTER USER RESPLENDENT_SYNC REMOVE PROGRAMMATIC ACCESS TOKEN resplendent;

Go to Settings → Integrations, find Snowflake, and click Connect.

Field What to enter
Account identifier The value from Find your connection details, such as MYORG-ANALYTICS
Username RESPLENDENT_SYNC
Warehouse The warehouse you granted access to
Database The database containing your tables and views
Schema A fixed schema, or leave blank to choose among accessible schemas when adding Datasets
Role RESPLENDENT_SYNC_ROLE

Select Key pair to upload or paste the private key, including its PEM header and footer. Enter the passphrase if it’s encrypted. For Access token, paste your token into Programmatic access token.

Save the connection, then choose the tables or views to sync. If you left Schema blank, use the Schema selector above the Tables and Views tabs to browse one schema at a time. Each Dataset keeps its schema-qualified source name after you add it.

Open SQL Studio from the Snowflake Dataset picker to inspect source data before pulling in a Dataset. SQL Studio accepts one read-only SELECT, WITH … SELECT, or Snowflake SHOW statement at a time. Use SHOW to list schemas, tables, or views in your account before writing a SELECT. It returns at most 1,000 rows and allows statements to run for up to five minutes. Use Export CSV to download the displayed rows. Running a query does not save it. Use Use as Dataset after a successful SELECT preview to configure a snapshot Dataset. Snowflake still records the statement in its query history.

SQL Studio runs with the role configured on the Snowflake connection, so Snowflake’s grants still decide which databases, schemas, tables, and views are visible. Keep that role read-only and grant access only to the objects Resplendent users should be able to explore. Only Resplendent users with full Dataset access can open SQL Studio.

Run a SELECT or WITH … SELECT, then click Use as Dataset. Name the Dataset, confirm its columns, and use Options to set the snapshot row limit and refresh interval. Custom SELECT Datasets default to 500 rows every 180 minutes and support snapshot syncing only. They require no primary key or update watermark.

Use an outer ORDER BY to choose which rows are included, with a tie-breaker for predictable results. Do not put an outer LIMIT, TOP, OFFSET, or FETCH clause in saved SQL: the snapshot row limit controls the final result. Limits inside subqueries are allowed. For example:

SELECT report_date, source_id, TO_JSON(payload) AS payload_json
FROM REPORTING.REPORTS
ORDER BY report_date DESC, source_id DESC

Every refresh reruns the SELECT with the configured cap and replaces the Dataset after a successful read. It does not accumulate older results. The cap counts query result rows; one JSON payload can contain many nested records. Use a Query Dataset to expand or otherwise shape JSON text after ingestion.

Open the Dataset editor and click Edit source SQL to change a saved query. Run a successful preview, click Apply SQL, review the columns, then Save & Close. Applying SQL in the dialog does not save the Dataset until that final step. SQL changes trigger a fresh snapshot. A failed read does not replace the existing data.

Custom SELECT sources are available on cloud Snowflake connections only, with snapshot limits from 1 to 100,000 rows. SHOW statements remain preview-only. Only users with full Dataset access may create or change source SQL. Saved queries use the same connection credentials and Snowflake permissions as ordinary source reads.

Each table or view you add becomes a Dataset. Incremental syncing requires a primary key that uniquely identifies each row and a sorting column that advances whenever a row is edited. Snapshot syncing also uses an id column and a sorting column. The id does not need to be unique, and the sorting column orders each pull newest-first without enabling incremental sync.

For incremental syncing, use an updated timestamp as the sorting column. It must advance whenever a row is inserted or edited. A creation date alone won’t capture later edits.

The first sync loads one batch, which defaults to 1,000 rows. Resplendent loads more history in later batches according to the Dataset’s history settings. You can raise the batch size to 500,000 rows. Smaller batches help queries finish when the warehouse is busy or a view is slow.

Scheduled incremental syncs fetch rows from the latest synced update value onward. They run hourly by default; adjust the interval in the Dataset’s sync settings to suit your reporting needs and Snowflake costs.

Turn off Incremental Syncing in the Dataset’s advanced settings to replace its data on each scheduled sync. The Dataset’s batch size is the number of rows requested for each full refresh, from 1,000 by default up to 500,000.

Each scheduled full refresh calls the same initial-pull function used when the Dataset is first saved. It reads one configured batch and sends it through the standard Parquet sync path, replacing the previous Dataset. Snapshot pulls use the sorting column to return the newest rows first, up to the configured batch size.

This uses read-only queries and does not create Streams, stages, or tables in the customer’s Snowflake account. Full refreshes transfer the selected scope each time and use the existing sync timeouts. Failed downloads restart from the beginning on retry.

Incremental syncs don’t detect rows deleted from Snowflake. Use a resync, or enable nightly resyncs, to remove them from your Dataset.

For incremental Datasets, a resync replaces the Dataset with the first configured batch, then reloads history according to your settings. Reports can show fewer rows during that reload. Full-refresh Datasets replace the Dataset with one configured batch on every initial, manual, nightly, or scheduled sync.

If the connection fails, check the account identifier and confirm that the service user has the role granted above. For key-pair authentication, the uploaded private key must match the public key registered on that user. For tokens, check the expiry and role restriction.

If your Snowflake account restricts connections by IP address, ask your administrator to allow Resplendent’s sync servers. Contact support@resplendentdata.com for the current IP addresses.

Missing tables or views usually mean the role needs USAGE on their database and schema or SELECT on the objects. A value in the connection’s Schema field also limits which objects are listed.

For Dataset settings, see Managing Datasets.