---
schema_version: "1"
id: de596df1dc529665bf792618eac0dc63111086ced75ba79909cefbfd80aba520
title: Snowflake Connection
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/analytics/264-0-0/bi_integrate_connectors_snowflake_settings.md
canonical_url: https://help.salesforce.com/s/articleView?id=analytics.bi_integrate_connectors_snowflake_settings.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: b2c7edcd3529ff9e05a2cb3455f46d84bac458f825db0cfe7350cc09a9da86d7
description: Create a remote connection using the Snowflake connector to sync data from Snowflake to CRM Analytics. This connector supports private key or OAuth 2.0 for authentication. Using OAuth 2.0 requires additional setup steps in Snowflake and the Salesforce credentials.
products:
  - CRM Analytics
  - Cross Cloud
release: "264"
---
# Snowflake Connection

Create a remote connection using the Snowflake connector to sync data from Snowflake to CRM Analytics. This connector supports private key or OAuth 2.0 for authentication. Using OAuth 2.0 requires additional setup steps in Snowflake and the Salesforce credentials.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/images/icon_note.png)

Note If you want to sync data from CRM Analytics to Snowflake, use the [Snowflake Output Connector](https://help.salesforce.com/s/articleView?id=analytics.bi_integrate_connectors_output_snowflake.htm&release=264.0.0&type=5 "Create a remote connection using the Snowflake output connector to write data from CRM Analytics to a Snowflake table. Then, use Sync Out to push raw data from CRM Analytics to Snowflake, or a Data Prep recipe output node to push transformed data.") or [Sync Out for Snowflake](https://help.salesforce.com/s/articleView?id=analytics.bi_integrate_connectors_sync_out_snowflake.htm&release=264.0.0&type=5 "Sync Out for Snowflake exports your raw local Salesforce data via CRM Analytics to Snowflake using the CRM Analytics output connector for Snowflake. With Sync Out for Snowflake, keep your Salesforce data in Snowflake up to date using scheduled Data Sync without the need for a third-party ETL tool. Fresh Salesforce data is vital if you maintain a central Snowflake data lake for processing, analysis, business automation, or storage. For example, give your shipping logistics team the freshest data by merging your account data from your system of record, Salesforce, with your ERP’s shipping data in your data lake.") instead.

## Connect to Snowflake with OAuth

To use the CRM Analytics Snowflake connector with an OAuth connection, you must configure Snowflake, Salesforce, CRM Analytics, and an external OAuth authorization server.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/images/icon_note.png)

Note You can’t use a custom authorization provider.

These high-level instructions help you navigate the steps involved. Remember to contact your Network Security or IT department for help with configuration consistent with your organization’s security requirements.

1. Configure Snowflake and your selected external authorization server. Here’s [Snowflake's help](https://docs.snowflake.com/en/user-guide/oauth-ext-overview), with detailed instructions for connecting to services, such as Okta.
2. With the authorization server is configured, follow the steps under _Define an Authentication Provider in Salesforce_ from [Configure an Authentication Provider Using OpenID Connect](https://help.salesforce.com/s/articleView?id=sf.sso_provider_openid_connect.htm&language=en_US).
    - If you’re using Okta, here are [Okta's instructions](https://support.okta.com/help/s/article/How-to-connect-Salesforce-with-Okta-using-OpenID-Connect?language=en_US) for adding their service to Salesforce.
3. With the authentication provider added to Salesforce, [define a named credential](https://help.salesforce.com/s/articleView?id=sf.named_credentials_about.htm&language=en_US) in Salesforce. Select the OAuth 2.0 authentication protocol and Named Principal identity type. Use of External Credentials isn't supported.
4. Verify the OAuth flow using the steps in [Snowflake testing procedures](https://docs.snowflake.com/en/user-guide/oauth-okta#testing-procedure). You can also verify from the principal access in the Salesforce external credential. Click **Authenticate** and make sure the Authentication Status updates to Configured.
5. Add the Snowflake connection. For **Authentication Type** setting, enter OAuth.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/images/icon_note.png)

Note OAuth 2.0 is the industry-standard protocol for authorization, however we’re unable to test every possible combination of services. Log a case with Salesforce Customer Support if your service can’t connect with the Authentication Provider system.

## Connection Details

Generate your Snowflake private key and private key passphrase using the [Snowflake Private Key documentation](https://docs.snowflake.com/en/user-guide/key-pair-auth.html#step-1-generate-the-private-key). If you opt to [rotate your Snowflake private key](https://docs.snowflake.com/en/user-guide/key-pair-auth.html#configuring-key-pair-rotation) manually, update the connection properties with the new key.

1. On the Data Manager Connections tab, click **New Connection**.
2. Click the name of the connector, and click **Next**.
3. Enter the connector settings.
4. To validate your settings and attempt to connect to the source, click **Save & Test**. If the connection fails, CRM Analytics shows possible reasons.

All settings require a value, unless otherwise indicated.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
        <colgroup>
          <col style="width:50%">
          <col style="width:50%">
        </colgroup>
        <thead class="slds-text-title_caps ">
          <tr class="">
            <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d126562e184">Setting</th>
            <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d126562e187">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Connection Name</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required. Identifies the connection. Use a convention that lets you easily distinguish
              between different connections.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Developer Name</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required. The API name for the connection. This name can’t include spaces. The API name is
              used in your recipes to reference data extracted through this connection. You can’t
              change the developer name after you create the connection.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Description</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required. The description for the connection.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Username</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required. The user name for the Snowflake account.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Password</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required for password authentication*. The password for your Snowflake account. </td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Authentication Type</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">
              <p>Required. The authentication type. Valid values include
                <code>OAuth</code>, <code>Password</code>, and <code>PrivateKey</code>.
              </p>
              <p><code>PrivateKey</code> is recommended as the most secure option.</p>
              <ul>
                <li>If you use <code>OAuth</code>, enter a value in the <strong class="uicontrol">Named Credential</strong> field.</li>

                <li>If you use <code>Password</code>, enter a value in the <strong class="uicontrol">Username</strong> and <strong class="uicontrol">Password</strong> fields.</li>

                <li>If you use <code>PrivateKey</code>, enter a value in the <strong class="uicontrol">Username</strong>, <strong class="uicontrol">&gt;Private Key</strong>, and <strong class="uicontrol">Private
                    Key Passphrase</strong> fields. </li>

              </ul>
            </td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Named Credential</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required for OAuth authentication. The <strong>Name</strong> field from a named credential stored in your Salesforce org.
            </td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Private Key</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">
              <p>Required for private key authentication*. A private key associated with your Snowflake account.
              </p>
              <div class="slds-box slds-box_x-small slds-theme_shade slds-m-top_medium slds-m-bottom_medium">
                <div class="slds-media slds-media_responsive">
                  <div class="slds-media__figure"><span class="slds-icon_container slds-icon_container_circle slds-icon-note-note"><img style="margin-bottom:0;" src="https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/images/icon_note.png" alt="Note"></span></div>
                  <div class="slds-media__body" style="padding-top:.5rem;padding-bottom:.5rem;"><span class="slds-text-title_caps">Note</span> You must use an encrypted private key and password generated with the Advanced Encryption
                    Standard (AES). For the detailed steps, refer to <a href="https://docs.snowflake.com/en/user-guide/key-pair-auth" target="_blank">Key-pair authentication and key-pair rotation</a> in Snowflake Help. When using
                    the <code>openssl</code> command to generate the encrypted key, be sure to replace <code>des3</code> with
                    <code>aes256</code> to ensure advanced encryption is used.
                  </div>
                </div>
              </div>
            </td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Private Key Passphrase</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required for private key authentication*. The passphrase associated with your specified private
              key.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Account</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">
              <p>Required. The name of your Snowflake account.</p>
              <p style="margin-bottom:0;">The account name is the first segment in the
                domain in your Snowflake URL. For example, <kbd>123abc</kbd> is your
                account name in
                <kbd>https://123abc.snowflakecomputing.com</kbd>.
              </p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Warehouse</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required. The Snowflake warehouse name. This setting is case-sensitive, so enter the value
              exactly as it appears in Snowflake.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Role</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Optional. The Snowflake role assigned to the user that you’re using to
              connect.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Additional JDBC URL Parameters</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">
              <p>Required. One or more JDBC connection parameters. Enter in the format
              </p>
              <p><kbd><var>parameter1</var>=<var>value</var>;<var>parameter2</var>=<var>value</var>;<var>parameter3</var>=<var>value</var></kbd></p>
              <p>For
                example:</p>
              <p style="margin-bottom:0;"><kbd>user=joates;warehouse=mywh;db=mydb&amp;schema=public</kbd></p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Database</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required. The Snowflake database name. This setting is case-sensitive, so enter the value
              exactly as it appears in Snowflake.</td>

          </tr>
          <tr class="">
            <td data-label="Setting" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e184 ">Schema</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d126562e187 ">Required. The Snowflake schema name. This setting is case-sensitive, so enter the value
              exactly as it appears in Snowflake.</td>

          </tr>
        </tbody>
      </table>

\*Enter the Password or both the Private Key and Private Key Passphrase. Learn more about private keys in the [Snowflake Private Key documentation](https://docs.snowflake.com/en/user-guide/key-pair-auth.html).

## Filter Data Synced to CRM Analytics

Exclude unnecessary or sensitive data from syncing to CRM Analytics with data sync filters. Filters run on the source object and speed up data sync by pulling only the data you need into CRM Analytics. If you expect to use excluded data in the future, use a recipe filter to limit the data written to a dataset instead of a data sync filter.

1. From Data Manager, click the **Connections** tab.
2. Select the connection associated with the object to filter.
3. Click the name of the object to filter.
4. Click **Data Sync Filter**.
5. Enter the filter.
6. Click **Save**.

For the Snowflake connector, enter a SQL filter as described in the [Snowflake WHERE documentation](https://docs.snowflake.net/manuals/sql-reference/constructs/where.html).

Remember these behaviors when working with the Snowflake connector.

- Connected object names must start with a letter and contain only letters, digits, or underscores. Object names can’t end with an underscore.
- Only field names with combinations of alphanumeric, dot, underscore, or dash characters are supported. If a connector includes field names that contain other characters, such as spaces or brackets, the sync fails.
- Rounding errors can occur in floating-point numbers when Snowflake performs the query that sends data to the connector. See the Snowflake help [Data types for floating-point numbers](https://docs.snowflake.com/en/sql-reference/data-types-numeric#label-data-type-float) for more information. If an ID is specified as a floating-point number in Snowflake, these errors can result in incorrect IDs being sent to the connector. Use the NUMBER or equivalent data type for IDs in Snowflake.
- The connector can sync up to 100 million rows or 50 GB per object, whichever limit is reached first. When using the connector, Salesforce Government Cloud org data is protected in transit with advanced encryption and can sync up to 10 million rows or 5 GB for each connected object, whichever limit is reached first.
- A Snowflake warehouse can be set to automatically resume or suspend. Review the Snowflake documentation for information about the optimal use of these features.
- The named credential must use the identity type Named Principal and have the status Authenticated.

- When using the legacy version of the Snowflake connector, the settings Private Key and Private Key Passphrase aren't used. The Password property is required.

#### See Also

- [Snowflake Connector Known Issues and Knowledge Articles](https://sfdc.co/snowflakeconnsearch)
- [Add and Remove Remote Objects and Fields from Data Sync](https://help.salesforce.com/s/articleView?id=analytics.bi_integrate_connectors_replicate_connection.htm&release=264.0.0&type=5 "Update data sync for connected external data sources to keep up with your changing business by adding objects, removing objects, and managing which fields are synced. Synced data is stored in CRM Analytics as objects that can be used in recipes.")