> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inflection.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Snowflake Setup and Configuration (using storage integration)

> Set up Snowflake as an Inflection data source and export destination.

## Prerequisites

### For Exporting Data from Inflection to Snowflake

* Admin access to your Inflection account
* Snowflake account credentials
* Service account with appropriate permissions
* Key-pair authentication credentials (recommended) or username and password
* The user running the SQL queries for the setup should have ACCOUNTADMIN role access

### For Importing Data from Snowflake to Inflection

* Admin access to your Inflection account
* Snowflake account with `ACCOUNTADMIN` role or `MANAGE GRANTS` privilege
* Database containing source tables that meet Inflection schema requirements
* Key-pair authentication credentials (recommended) or username and password
* The user running the SQL queries for the setup should have ACCOUNTADMIN role access

<Info>
  **Important:** Snowflake is deprecating single-factor password authentication for service users. By August-October 2026, all service users (TYPE=SERVICE) must use key-pair authentication. Learn more in [Snowflake's Password Deprecation Timeline](https://docs.snowflake.com/en/user-guide/security-mfa-rollout).
</Info>

## Import Snowflake Data to Inflection

### Set Up Import Connection in Inflection

1. Navigate to **Connections → Data Connections**
2. Click **Add new connection**

<img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/01.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=dad767282d36236a2d475f52807bb358" alt="Add new connection button on the Data Connections page" width="2482" height="1386" data-path="images/connections/warehouses/snowflake/01.png" />

1. Enter connection details:

2. Choose your authentication method:

   **Option A: Key-Pair Authentication (Recommended)**:

   * **Account name** - a human-friendly name for this particular Snowflake import
   * **Database** - name of the database where all the Inflection-ready tables are present
   * **Username** - username of the service account
   * **Private key** - RSA private key (2048-bit minimum) in PEM format
   * **Private key passphrase** (if applicable) - for encrypted private keys

   <Tip>
     **Reference:** [Here](https://docs.snowflake.com/en/user-guide/key-pair-auth#generate-the-private-keys) is the document from Snowflake to generate your Private Key
   </Tip>

   <img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/02.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=2362b482790189c7a336268bf7993d80" alt="Key-pair authentication fields for the Snowflake import connection" width="649" height="1000" data-path="images/connections/warehouses/snowflake/02.png" />

   **Option B: Username & Password Authentication**

   * **Account name** - a human-friendly name for this particular Snowflake import
   * **Database** - name of the database where all the Inflection-ready tables are present
   * **Username, Password** - authentication credentials for the Snowflake service account

3. Integration setup

   1. Run the SQL script provided, get the **STORAGE\_AWS\_IAM\_USER\_ARN** and **STORAGE\_AWS\_EXTERNAL\_ID** values from the query result, provide them in the corresponding text boxes and submit

   <img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/03.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=8641ad9bdd1252b30be8e78962040387" alt="Storage integration setup showing the SQL script and the STORAGE_AWS_IAM_USER_ARN and STORAGE_AWS_EXTERNAL_ID fields" width="1917" height="1041" data-path="images/connections/warehouses/snowflake/03.png" />

<Accordion title="Set up Snowflake to allow Inflection read">
  You'll need to be logged in as an `ACCOUNTADMIN` or an account that has `MANAGE GRANTS`. Inflection will need access to the Database, Schema, Tables, Views and Warehouse that the data is in. While the below steps defines default resources, you can define any user, role, warehouse you'd like.

  1. Create warehouse

     ```sql theme={null}
     CREATE WAREHOUSE "INFLECTION_WAREHOUSE"
       WITH WAREHOUSE_SIZE = 'XSMALL'
         WAREHOUSE_TYPE = 'STANDARD'
         AUTO_RESUME = TRUE;
     ```

  2. Create Role for Inflection

     ```sql theme={null}
     CREATE ROLE INFLECTION_ROLE
        COMMENT = 'Access on inflection schema to maintain state between syncs';
     ```

  3. Create User for Inflection

     Choose based on your authentication method:

     **For Key-Pair Authentication (Recommended):**

     ```sql theme={null}
     -- Step 1: Create user without password
     CREATE USER INFLECTION_USER
       DEFAULT_ROLE = INFLECTION_ROLE
       DEFAULT_WAREHOUSE = "INFLECTION_WAREHOUSE"
       COMMENT = 'User for inflection operations';

     -- Step 2: Assign public key (replace with your actual public key)
     ALTER USER INFLECTION_USER 
       SET RSA_PUBLIC_KEY='<your_public_key_without_BEGIN_END_delimiters>';
     ```

       <Note>
         **Reference:** [Here](https://docs.snowflake.com/en/user-guide/key-pair-auth#generate-the-private-keys) is the document from Snowflake to generate your Key
       </Note>

     **For Username & Password Authentication:**

     ```sql theme={null}
     CREATE USER INFLECTION_USER
     MUST_CHANGE_PASSWORD = FALSE
     DEFAULT_ROLE = INFLECTION_ROLE
     DEFAULT_WAREHOUSE = "INFLECTION_WAREHOUSE"
     PASSWORD = "my_strong_password"
     COMMENT = 'User for inflection operations';
     ```

  4. Create an `inflection` schema in the database. The database refers to the database where the source data lives. Replace `<DB_NAME>` with the database name.

     ```sql theme={null}
     CREATE SCHEMA <DB_NAME>.INFLECTION
     	COMMENT = 'Schema for Inflection operations';
     ```

  5. Granting permissions and access.

     1. Role to User

        ```sql theme={null}
        GRANT ROLE INFLECTION_ROLE TO USER INFLECTION_USER;
        ```

     2. Warehouse usage to Role

        ```sql theme={null}
        GRANT USAGE ON WAREHOUSE "INFLECTION_WAREHOUSE" TO ROLE "INFLECTION_ROLE";
        ```

     3. Grant access to the `inflection` schema

        ```sql theme={null}
        GRANT USAGE, CREATE TABLE, CREATE VIEW
          ON SCHEMA <DB_NAME>.INFLECTION
          TO ROLE INFLECTION_ROLE;
        GRANT ALL 
        	ON FUTURE TABLES IN SCHEMA INFLECTION 
        	TO ROLE INFLECTION_ROLE;
        ```

     4. Grant access to the source data

        ```sql theme={null}
        #Permission to list schemas in the database (USAGE: Access to USE and SHOW ops)
        GRANT USAGE
        	ON DATABASE <DB_NAME>
        	TO ROLE INFLECTION_ROLE;

        #Permission to list tables and views in the database
        GRANT USAGE
        	ON SCHEMA <DB_NAME>.<SCHEMA_NAME>
        	TO ROLE INFLECTION_ROLE;

        #Permission to read from the table
        GRANT SELECT
          ON TABLE <DB_NAME>.<SCHEMA_NAME>.<TABLE_NAME>
          TO ROLE INFLECTION_ROLE;
        ```

  ### FAQ: My data is in multiple tables. Does Inflection support views?

  **Certainly. You can create the view in any shape and provide access to it to the `inflection user` like any table.**

  ```sql theme={null}
  #Create a view
  CREATE VIEW <DB_NAME>.<SCHEMA_NAME>.<VIEW_NAME> AS
  	SELECT * FROM <DB_NAME>.<SOURCE_SCHEMA_NAME>.<SOURCE_TABLE_NAME>

  #Permission to read from the view
  GRANT SELECT
    ON VIEW <DB_NAME>.<SCHEMA_NAME>.<VIEW_NAME>
    TO ROLE INFLECTION_ROLE;
  ```

  **Keep in mind that any breaking changes from the tables that the view is generated from i.e. deleting a column, will break the view which in turn will break the connection.**
</Accordion>

## Export Inflection Data to Snowflake

### Set up Export Connection in Inflection

1. Navigate to **Connections → Data Connections**
2. Click **Add new connection**

<img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/01.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=dad767282d36236a2d475f52807bb358" alt="Add new connection button on the Data Connections page" width="2482" height="1386" data-path="images/connections/warehouses/snowflake/01.png" />

1. Select **Snowflake** as your destination platform.

2. **Select connection type**: Choose **Export Data to Snowflake**.

   <img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/04.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=f6d862044cf524fef02ff4ec46fe4e54" alt="Export Data to Snowflake connection type selection" width="2469" height="1397" data-path="images/connections/warehouses/snowflake/04.png" />

3. **Enter your Snowflake credentials**

   * Choose your authentication method.
     * **Key-Pair Authentication (Recommended):**
       * **Connection name:**

       * **Account name:** a human-friendly name for this Snowflake connection

       * **Username**: username of the service account that connects to Snowflake

       * **Private key:** RSA private key (2048-bit minimum) in PEM format

         <Info>
           See [Snowflake's key-pair authentication guide](https://docs.snowflake.com/en/user-guide/key-pair-auth#generate-the-private-keys) to generate your private key.
         </Info>

       * **Private key passphrase** (if applicable): for encrypted private keys

       * **Database** and **Schema:** name of the database and schema where Inflection should write data
     * **Option B: Username & Password Authentication**

       <Info>
         Password authentication will be deprecated by August. Migrate to key-pair authentication before this deadline.
       </Info>

       * **Connection name:**
       * **Account name:** a human-friendly name for this Snowflake connection
       * **Username, Password:** authentication credentials for a service account
       * **Database** and **Schema:** name of the database and schema where Inflection should write data

4. Click **Create Connection**

5. Integration setup

   1. Run the "Storage Setup SQL" script provided in Connection details, get the **STORAGE\_AWS\_IAM\_USER\_ARN** and **STORAGE\_AWS\_EXTERNAL\_ID** values from the query result, provide them in the corresponding text boxes and submit

   <img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/05.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=0e31fab4b8b820c9aab203894ef95758" alt="Storage Setup SQL and integration fields in Connection details" width="1171" height="987" data-path="images/connections/warehouses/snowflake/05.png" />

The connection will remain in **inactive** state until credentials and destination tables are validated by the Inflection team.

### Create Export Tables in Snowflake

Inflection provides a custom SQL script tailored to your configuration. Run this script to create the export tables in your data warehouse.

1. Navigate to **Connections** → Select the Snowflake Export connection
2. Click **Connection Details**
3. Click **Copy code** in the **Table Creation SQL** section

<img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/06.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=60f42f3463545f819fcb53f4947bf941" alt="Copy code button in the Table Creation SQL section of Connection Details" width="2448" height="1450" data-path="images/connections/warehouses/snowflake/06.png" />

The script creates tables with the necessary structure and grants required permissions (INSERT, UPDATE, DELETE) for Inflection to write data.

### Activate the Export Connection

Once you have saved credentials and created required tables in Snowflake, your setup is complete.

The Inflection team will validate the setup and activate the sync. You will be notified once the sync has started and data is being sent.

<Info>
  Activation may take up to two business days. Please ensure your data team notifies you once your tables are set up in your data warehouse.
</Info>

<Note>
  ### Changing from Username Password to Key Pair Authentication

  To change your connection :

  1. Go to your snowflake connection (import or export)

  2. Go to "Connection Settings" tab

     1. Snowflake Export

          <img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/07.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=3a33780b468b8df3d4c08ff4a9e5c023" alt="Connection Settings tab for a Snowflake Export connection" width="2906" height="1586" data-path="images/connections/warehouses/snowflake/07.png" />

     2. Snowflake Import

          <img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/08.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=ad62ba7dab2ef56f11a2cf897d57027c" alt="Connection Settings tab for a Snowflake Import connection" width="3020" height="1728" data-path="images/connections/warehouses/snowflake/08.png" />

  3. Click on the "Edit Details" button in top right

  4. Change the "Authentication Type" to "Key "Pair."

       <img src="https://mintcdn.com/inflection-4b2c0de4/0Fy2fPaKm7bhQlZX/images/connections/warehouses/snowflake/09.png?fit=max&auto=format&n=0Fy2fPaKm7bhQlZX&q=85&s=138e26bf7663b7a27a17ac05f1506af5" alt="Authentication Type set to Key Pair in the Edit Details form" width="3022" height="1720" data-path="images/connections/warehouses/snowflake/09.png" />

  5. Update the following fields

     1. **Private key** - RSA private key (2048-bit minimum) in PEM format
     2. **Private key passphrase** (if applicable) - for encrypted private keys
     3. **Database** and **Schema** - name of the database and schema where Inflection should write data

          <Note>
            **Reference:** [Here](https://docs.snowflake.com/en/user-guide/key-pair-auth#generate-the-private-keys) is the document from Snowflake to generate your Private Key
          </Note>

  6. Click on save

  Your connection will now use key pair for authentication.

  **Follow these steps for both IMPORT and EXPORT connections.**
</Note>
