Skip to main content
This page covers what your Snowflake administrator sets up. The steps you take inside Inflection are in Import from Data Warehouse and Export to Data Warehouse.

Prerequisites

  • A Snowflake role with ACCOUNTADMIN, or MANAGE GRANTS plus ownership of the objects you will grant.
  • Key-pair authentication, or a Snowflake user created with TYPE = SERVICE. Snowflake requires multi-factor authentication for password logins by people. Inflection connects as a service and cannot answer an MFA prompt, so a plain password on a normal user fails with Failed to authenticate: MFA with TOTP is required.
  • For import, source tables or views that meet the source table requirements in Import from Data Warehouse.
Snowflake is retiring single-factor password authentication for service users. Move to key-pair authentication now rather than later. See Snowflake’s authentication policy timeline.

Connection Fields

Import connection Export connection

Network Access

Only needed if your account uses a network policy that restricts access by IP. The Connect step of the import wizard lists Inflection’s IP addresses under Network access (optional). Add them to your network policy.

Prepare Snowflake for Import

Create the Key Pair

On your computer, in a macOS or Linux terminal:
Choose a passphrase when prompted and keep it. Inflection needs it when you enter the connection. The private key must be encrypted. An unencrypted key will be rejected with Private key is not encrypted.

Create the Warehouse, Role, and User

Run the following in a Snowflake worksheet. The names are defaults. Use your own if you prefer, and use them consistently in every later step.
To register the key on an existing user instead:
If you must use a password, the user still has to be a service user:

Give the User a Default Warehouse and Role

Every Snowflake query, including listing your tables, runs on a compute warehouse. The access statements Inflection generates in Step 2 grant the role access to your data, but they do not cover the warehouse. Without this step the connection test passes and Step 2 cannot list your tables.
Setting the default role makes sure Inflection signs in with the role that holds the grants.

Grant Access to Your Data

In Step 2 of the import wizard, the Warehouse access chip checks read access on your source schemas and write access on the write location. If anything is missing, it shows the exact statements to run, built from your database, role, schemas, and write location. Click Copy statements, run them as ACCOUNTADMIN or the owning role, then click Re-check. The generated statements have this shape. Run the generated version, not this one.
Make sure the role also has these grants on the write database, in addition to the generated statements. The access check needs CREATE SCHEMA on the database even when the schema already exists, and if your write location is in a different database from your sources, the role needs USAGE on that database too.
By default the write location is a schema named inflection in the same database you read from. You can choose a different database and schema in the wizard.

Run the Storage Integration SQL

Shown only when Inflection has enabled it for your account. Inflection moves your tables out of Snowflake through an Inflection-owned S3 location. By default that transfer carries temporary AWS credentials inside the sync query. A storage integration replaces those credentials with a one-time trust between your Snowflake account and Inflection’s storage, which some security teams require.
  1. In the import wizard, on Save & activate, open Storage Setup SQL and copy the script. It is generated for the connection’s primary schema after the Step 2 access check.
  2. Run it in a Snowflake worksheet as ACCOUNTADMIN. It creates the integration and a stage, and finishes with DESCRIBE INTEGRATION.
  3. From that output, copy STORAGE_AWS_IAM_USER_ARN and STORAGE_AWS_EXTERNAL_ID into the two fields in Inflection and click Submit aws setup.
  4. The activation requirement Snowflake storage integration is set up turns green and Activate connection is enabled.
You can save the connection as a draft, run the SQL later, and come back. Nothing else in the setup depends on it.

Create Views Yourself (Optional)

When you choose We draft a view for you in the wizard, Inflection writes the CREATE OR REPLACE VIEW statement for you. You can either click Create it for me, which runs it with the write grant above, or click Copy SQL, run it yourself, and click Verify View. You can also build your own view ahead of time and pick it as a source like any table:
A breaking change to a table the view is built on, such as dropping a column, breaks the view and therefore the connection. Tables and views share a namespace in Snowflake, so avoid giving a view the same name as an existing table. The wizard labels each source as a table or a view for this reason.

Prepare Snowflake for Export

Create the Destination Schema and User

Inflection needs a database and schema to write the export tables to, and a user with the role that owns them. You can reuse the role and user from the import steps, or create dedicated ones the same way. Inflection needs only table-level permissions: INSERT, UPDATE, DELETE, and ALTER on the export tables.

Run the Storage Setup SQL

After you create the export connection in Inflection, open it, run the Storage Setup SQL shown under Connection Details in a Snowflake worksheet as ACCOUNTADMIN, and enter the STORAGE_AWS_IAM_USER_ARN and STORAGE_AWS_EXTERNAL_ID values from the result into the two fields in Inflection. Storage Setup SQL and integration fields in Connection details

Create the Export Tables

  1. In Inflection, open the export connection and click Connection Details.
  2. Click Copy code in the Table Creation SQL section.
  3. Run the script in Snowflake.
Copy code button in the Table Creation SQL section of Connection Details The script creates the tables with the structure Inflection writes and grants the permissions it needs. For reference, the tables look like this. Always run the generated script rather than this example.
Once the tables exist, tell your Inflection team. They validate the setup and activate the sync.

Switch from Password to Key-Pair Authentication

The steps are the same for import and export connections. Register the matching public key on the Snowflake user first, as shown in Create the Warehouse, Role, and User.
  1. In Inflection, open your Snowflake connection.
  2. Click the Connection Details tab. Connection Details tab for a Snowflake Export connection Connection Details tab for a Snowflake Import connection
  3. Click Edit Details in the top right.
  4. Change Authentication Type to Key Pair. Authentication Type set to Key Pair in the Edit Details form
  5. Paste the encrypted private key into Private key and enter the Private key passphrase. For an export connection, confirm the Database and Schema Inflection writes to.
  6. Click Save.

Troubleshooting

You are signing in as a normal user with a password. Snowflake’s MFA policy blocks that for services. Switch to Key Pair authentication, or create the user with TYPE = SERVICE.
Inflection requires an encrypted PKCS#8 private key plus its passphrase. Generate the key with the openssl commands above, paste the contents of rsa_key.p8 (not rsa_key.pub), and enter the passphrase.
The Inflection user has no default warehouse, so Snowflake cannot run the listing query. Run Give the User a Default Warehouse and Role, then click Re-check.
The role is missing CREATE SCHEMA on the write database, or USAGE on it when the write location is in a different database from your sources. Run GRANT USAGE, CREATE SCHEMA ON DATABASE <write db> TO ROLE INFLECTION_SYNC; and click Re-check. Alternatively, set the write database to the same database you read from.
The export tables do not match the Table Creation SQL. Compare them with the script under Connection Details and add the missing columns, or drop and recreate the tables from the script, then re-run the sync.
A column Inflection reads was renamed or dropped, or a view it reads broke because an underlying table changed. See Change Your Source Tables Safely in Manage and Troubleshoot Data Warehouse Syncs.