Push-to-Warehouse Setup: Snowflake
In this guide, you will be setting up a connection to a data warehouse destination you own. Reach out to your Customer Success Manager or [email protected] to confirm that your Modern Treasury plan includes the Push to Warehouse capability.
Prerequisites
- Your Snowflake user must be granted
securityadmin
andsysadmin
roles to complete the next step. To verify these roles, runSHOW GRANTS TO USER <your_username>;
and review therole
column. - If your Snowflake data warehouse is using Snowflake Access Policies, please reference our Push to Warehouse IP Address documentation to complete Step 2.
Step 1: Create role, user, warehouse, and database in the data warehouse
- Review and make any changes to the following setup script.
begin;
-- create variables for user / password / role / warehouse / database
-- please note that the use of all-caps is *required* for all values except the password
set role_name = 'TRANSFER_ROLE';
set user_name = 'TRANSFER_USER';
set user_password = 'some_password';
set warehouse_name = 'TRANSFER_WAREHOUSE';
set database_name = 'TRANSFER_DATABASE';
-- change role to securityadmin for user / role steps
use role securityadmin;
-- create role for data transfer service
create role if not exists identifier($role_name);
grant role identifier($role_name) to role SYSADMIN;
-- create a user for data transfer service
create user if not exists identifier($user_name)
password = $user_password
default_role = $role_name
default_warehouse = $warehouse_name;
grant role identifier($role_name) to user identifier($user_name);
-- change role to sysadmin for warehouse / database steps
use role sysadmin;
-- create a warehouse for data transfer service
create warehouse if not exists identifier($warehouse_name)
warehouse_size = xsmall
warehouse_type = standard
auto_suspend = 60
auto_resume = true
initially_suspended = true;
-- create database for data transfer service
create database if not exists identifier($database_name);
-- grant service role access to warehouse
grant USAGE
on warehouse identifier($warehouse_name)
to role identifier($role_name);
-- grant service access to database
grant CREATE SCHEMA, MONITOR, USAGE
on database identifier($database_name)
to role identifier($role_name);
commit;
Using an existing
schema
By default, a new schema (with a name you provide) will be created in the target Snowflake database upon the initial connection. If instead you create the
schema
ahead of time, you may remove theCREATE SCHEMA
permission, and insteadgrant ALL PRIVILEGES
on the targetschema
for the designatedrole
.The script below can be used to complete this step:
set role_name = 'TRANSFER_ROLE'; set database_name = 'TRANSFER_DATABASE'; set schema_name = 'PRECREATED_SCHEMA'; use database identifier($database_name); grant ALL PRIVILEGES on schema identifier($schema_name) to role identifier($role_name);
Using an existing warehouse or database
By default, this script creates a new warehouse and a new database. If you'd prefer to use an existing warehouse/database, change the
warehouse_name
variable fromTRANSFER_WAREHOUSE
to the name of the warehouse to be shared/database_name
variable fromTRANSFER_DATABASE
to the name of the database to be shared.
- In the Snowflake interface, select the dropdown next to the "Run" button, and click Run All. This will run every query in the script at once. If successful, you will see
Statement executed successfully
in the query results.
Step 2: Configure the Snowflake access policy
If your Snowflake data warehouse is using Snowflake Access Policies, a new policy must be added to allow the transfer service static IP to write to the warehouse.
- Review current network policies to check for existing IP safelists.
SHOW NETWORK POLICIES;
- If there is no existing Snowflake Network Policies (the
SHOW
query returns no results), you can skip to Step 3. - If there is an existing Snowflake Network Policy, you must alter the existing policy or create a new one to safelist the data transfer service static IP address. Use the
CREATE NETWORK POLICY
command to specify the IP addresses that can access your Snowflake warehouse.
CREATE NETWORK POLICY <transfer_service_policy_name> ALLOWED_IP_LIST = ('5.4.7.8/32');
Creating your first network policy
If you have no existing network policies and you create your first as part of this step, all other IPs outside of the
ALLOWED_IP_LIST
will be blocked. Snowflake does not allow setting a network policy that blocks your current IP address. (An error message results while trying to create a network policy that blocks the current IP address.) But be careful when setting your first network policy.
Step 3: Add your destination
Securely share your host name, database name, your chosen schema name, username, and password with us to complete the connection.
Updated 2 months ago