Skip to content

Snowflake

Execute parameterized warehouse reads and explicitly authored append-style INSERT operations. Source results are rows; destinations must already exist.

Use the shared connection workflow to create this data source in your workspace. You can read this guide without an account or provider resources. Running examples requires your own non-production system and synthetic data.

Connection settings

Field Required Meaning
account Yes Snowflake account identifier
warehouse Yes Warehouse used for execution
database Yes Database namespace
schema Yes Schema namespace
role WIF Dedicated session role
wif_objects WIF Explicit existing table names and SELECT or INSERT privileges
connect_timeout No Connection timeout

Authentication and permissions

Password authentication (auth_type: password) is available with a username and password wherever your Snowflake policy permits it.

For workload identity (auth_type: workload_identity), save the connection with an exact account identifier, a dedicated role, and explicit source SELECT or sink INSERT table selections. Use uppercase for ordinary unquoted Snowflake object names. Enter names without SQL quoting or qualification; dots and spaces are treated as part of the exact identifier. Wildcards and future grants are unavailable.

Braidplane provisions the identity automatically. The saved connection stays inactive until verification. Open the onboarding panel, review its public issuer, connection-specific subject, account-specific audience, and generated SQL script. Your Snowflake administrator performs the one external setup action: run that script in the configured account. Braidplane never requests administrator credentials or runs administrative SQL.

After identity readiness, select Verify. Failures distinguish identity provisioning, Snowflake trust, role/warehouse usage, and selected table grants. Use Retry status to refresh provisioning. Changing the configuration requires another Verify. The script preserves existing users and grants on rerun; review any existing-name conflicts, and use a dedicated role without broader privileges.

Disable identity revokes access for new logins. Your Snowflake administrator must terminate already-open sessions for immediate access removal. Enable identity provisions again and requires another successful Verify.

Each saved connection has its own subject. Account identifiers must be lowercase letters, digits, hyphens, and dots, not URLs or snowflakecomputing.com hostnames. An unsaved draft cannot use WIF. Tokens and token-file paths are never customer inputs. OAuth and key-pair JWT remain unavailable.

Use a source role with warehouse usage and read access only to the selected schemas/tables. Set read_only: true. Use a separate writable connection with only the destination INSERT privileges. Credentials are encrypted at rest and are not returned in API responses.

Test and discover

Customer WIF verification authenticates and checks the selected direct role and table grants without writing test rows. It does not validate every query or row policy; run your intended read or append after activation. Password tests ping the configured session. Refresh reads visible column metadata and exposes tables as schema.table. Missing metadata usually requires checking the selected role, database, and schema visibility.

Read example

Create or choose a PUBLIC.CUSTOMERS table containing ID and EMAIL. Define an integer customer_id parameter. A matching record returns one row; unquoted Snowflake identifiers normally appear in uppercase.

{
  "type": "snowflake",
  "sql": "SELECT ID, EMAIL FROM PUBLIC.CUSTOMERS WHERE ID = {{customer_id}}"
}

Write example

Create PUBLIC.CUSTOMER_EXPORT with compatible columns. Save this as a pipeline sink receiving rows with ID and EMAIL. The operation appends those rows. Select a ledger-backed replay policy or the unsafe classification, which refuses replay after an attempt is claimed; this connector does not offer native merge/upsert helpers.

{
  "type": "snowflake",
  "sql": "INSERT INTO PUBLIC.CUSTOMER_EXPORT (ID, EMAIL) SELECT ID, EMAIL FROM input"
}

Operation reference and pipeline behavior

The statement fields are type: snowflake and sql. Pipeline steps use operation_type: snowflake. Values use {{parameter_name}} placeholders; identifiers cannot be parameterized. An INSERT sink reads upstream rows through input, which Braidplane supplies between the INSERT target and SELECT.

Watermark source contracts can bind {{runtime.incremental.lower_bound.value}} and {{runtime.incremental.upper_bound.value}}. The SQL must filter on those bounds and return the configured field, including handling an empty first checkpoint.

Limits and troubleshooting

  • No staged loads, COPY INTO, Snowpipe, DDL/schema management, merge/upsert helpers, or public result pagination.
  • PrivateLink/custom endpoint routing is not exposed. Workload identity is deployment-dependent, not automatically available to every organization.
  • Authentication failure: verify the selected authentication mode and account. A workload-identity error may require coordinated deployment setup.
  • Execution failure: check warehouse availability, role privileges, identifier casing, table existence, and upstream column types.
  • Operations are bounded by execution time, rows, and payload size. A successful connection test does not prove an INSERT will succeed.

See operation and pipeline basics for where to use these statements, parameters, environment bindings, and replay safety. Return to the connector directory.

Run the generated SQL as one complete block in a Snowsight worksheet. The administrator needs authority to create the user, role, and schema-scoped authentication policy, and issue the selected grants. Inspecting an existing service user requires user MONITOR and visibility of its type through user OWNERSHIP or account MANAGE GRANTS. Assigning the policy separately requires APPLY AUTHENTICATION POLICY on the user or account; MANAGE GRANTS alone does not authorize that assignment. See Snowflake authentication-policy privileges. Before assigning its authentication policy or role, the block checks an existing user against the exact service type, issuer, subject, and audience; a conflict stops the block without changing that user. Existing roles and policies are preserved.