Snowflake

This article describes how to connect Tableau to a Snowflake data warehouse and set up the data source.

Note: Key-pair authentication is available for Tableau Desktop and Tableau Cloud starting with version 2024.3. It will be available in Tableau Server in a future release.

Note: Publishing workbooks with Snowflake key-pair authentication is not supported in web authoring. You must use Tableau Desktop to create the workbooks, which can then be published to Tableau Cloud.

Before you begin

Before you begin, gather this connection information:

  • Name of the server name that you want to connect to
  • Authentication method:
    • OAuth: Use this method if you want to enable federation from an IDP.
    • Username and Password: Use this method if you want to store user credentials in Snowflake.
    • Okta Username and Password: Use this method if you plan on using Okta to manage your authentication.
    • Key-pair authentication: use public and private key-pair credentials for a stronger security connection.
  • Sign-in credentials needed for the authentication method you choose.
    Note: If you are using Key-pair authentication, you need to use OpenSSL version 3.x or newer to create the keys.
  • (Optional) Initial SQL statement to run every time Tableau connects.
  • (Optional) Any custom driver parameters or a new Default VARCHAR size to use with this connection.

Note: To use Tableau Cloud with Key-pair authentication, you must also save credentials in Tableau Cloud before you can publish workbooks for sharing. For more information, see Configure Snowflake for Key-pair Authentication.

Driver required

This connector requires a driver to talk to the database. If the driver is not installed on your computer, Tableau displays a message in the connection dialog box with a link to the Driver Download(Link opens in a new window) page where you can find driver links and installation instructions.

Note: To support using Key-pair authentication with Snowflake, you must install an ODBC driver from Snowflake that is version 3.4.0 or newer.

Make the connection and set up the data source

After you select Snowflake as your connection, a dialog displays with three tabs. Use the General tab to select the Server, Warehouse and Authentication type. You can use the Initial SQL tab to optionally run a SQL command at the beginning of every connection. For more information, see Run Initial SQL. Lastly, you can use the Advanced tab to optionally add custom driver parameters and a default VARCHAR size.

For information about how to configure OAuth for connections between Tableau and Snowflake, see Configure OAuth for Snowflake Connections(Link opens in a new window) and External OAuth for Snowflake.

Connect Tableau to your data

  1. On the Connect screen, under To a Server, select More and then select Snowflake.
  2. On the General tab, enter the name of the server that you want to connect to.
  3. (Optional) Enter the Role and Warehouse.
  4. Select the Authentication method you'll use: Username and Password, Okta Username and Password, Sign in using OAuth, or Sign in using Key-pair.
  5. (Optional) Select Initial SQL if you want to run a SQL command at the beginning of every connection. For more information, see Run Initial SQL.
  6. (Optional) For Tableau Desktop and Server, enter any custom parameters on the Advanced tab you wish to use for this connection. (Not available on Tableau Cloud)
  7. Complete the login steps for the selected authentication method:
    • Sign in using OAuth:
      1. Click Sign In.
      2. On the web page that opens, log in to Snowflake by entering your username and password and selecting Log In. Alternately, select Single Sign On if Snowflake is configured to support SSO.
      3. Click OK to confirm authorisation to access your Snowflake data.
    • Username and Password:
      1. Enter the username and optional password.
      2. Click Sign In.
    • Okta Username and Password:
      1. Enter the username and optional password.
      2. Enter the optional SAML IdP (the URL for your Okta server).
      3. Click Sign In.
    • Sign in using Key-pair
      1. In Server, enter the Snowflake server address.
      2. Enter the Warehouse and optionally the Role.
      3. In Authentication, select Sign in using Key-pair.
      4. Enter the Username associated with these keys.
      5. In Private key file, browse to the .p8 file containing your private key.
      6. (Optional) Enter the Private key file password if it is protected by one.
  8. Next, follow the instructions under Set up the Data Source.
  9. If Tableau can't make the connection, verify that your credentials are correct. If you still can't connect, your computer is having trouble locating the server. Contact your network administrator or database administrator.

Access Token Timeout: Always Validate Access Token TDC

The Snowflake access token expires after 10 minutes. In certain extract refresh processes, new connections are established later in the job when the access token has expired. To address this issue, we have added a new capability, which is enabled by default starting in Tableau 2024.2. To enable this capability in older releases, you can use the following TDC.

<connection-customization class='snowflake' enabled='true' version='10.0'>
    <vendor name='snowflake' />
    <driver name='snowflake' />
    <customizations>
        <customization name='CAP_OAUTH_VALIDATE_ALWAYS' value='yes'/>
    </customizations>
</connection-customization>

This TDC can be used with Tableau Desktop or Tableau Server by including it in the Tableau repository datasources folder. For Tableau Cloud, you can use Bridge and configure a custom TDC by connecting through there. For more information, see Customise and Tune a Connection.

Note: Embedded TDCs are not supported with flows.

Customise the connection using driver parameters

You can modify the connection made with the Snowflake connector by appending driver parameters to the connection string in the Advanced tab.

Note: You can’t change the driver parameters that Tableau generates, you can only append parameters.

For example, this syntax specifies a proxy server to use when the no_proxy values aren’t met and host names are allowed to bypass the proxy server:

Proxy=http://proxyserver.company:80;no_proxy=.trustedserver.com;

For another custom driver parameters example, see Use a proxy for Snowflake.

You can also enter an alternative size for VARCHAR in the Default VARCHAR size (bytes) field. For more details about using this field and the impacts on performance, see the Snowflake ODBC documentation.

Note: If you want customisation without embedding it in the data source, you can configure parameters in the registry on Windows (only parameters that are marked as "Configuration Parameters" are available). For details about driver parameters, see ODBC Configuration and Connection Parameters on the Snowflake website.

Set up the data source

On the data source page, do the following:

  1. (Optional) Select the default data source name at the top of the page, and then enter a unique data source name for use in Tableau. For example, use a data source naming convention that helps other users of the data source figure out which data source to connect to.

  2. From the Warehouse drop-down, select a warehouse or use the text box to search for a warehouse by name.

    Note: If you leave this blank and don't select a warehouse, Tableau uses your default Snowflake virtual warehouse.

    For more information, see Default virtual warehouses in Snowflake.

  3. From the Database drop-down, select a database or use the text box to search for a database by name.
  4. From the Schema drop-down, select a schema or use the text box to search for a schema by name.
  5. Under Table, select a table or use the text box to search for a table by name.
  6. Drag a table to the canvas, and then select the sheet tab to start your analysis.

Note: If you are publishing your workbooks when using Key Pair Authentication, make sure you select the proper authentication type in the Manage Data Sources section of the Publish Workbook window.

Sign in on a Mac

If you use Tableau Desktop on a Mac, when you enter the server name to connect, use a fully qualified domain name, such as mydb.test.ourdomain.lan, instead of a relative domain name, such as mydb or mydb.test.

Alternatively, you can add the domain to the list of Search Domains for the Mac computer so that when you connect, you need to provide only the server name. To update the list of Search Domains, go to System Preferences > Network > Advanced, and then open the DNS tab.

Default virtual warehouses in Snowflake

When you create a Snowflake data source, you're creating a Snowflake warehouse (for computational resources) and Snowflake databases (for data resource). Both warehouses and databases require permissions to access them. You can use different warehouses to access the same database, depending on the computation power you need, assuming you have permissions for each warehouse and database.

When you create a data source, you have the option to choose a warehouse from a drop-down list. If you leave this blank and don't select a warehouse, Tableau uses your default Snowflake virtual warehouse. If you subsequently publish that data source or workbook, when a user connects, Tableau will use that person's default Snowflake virtual warehouse.

Each user should be assigned a default warehouse so that Tableau can use that one as a default to open a workbook from a Snowflake data source.

Use a proxy for Snowflake

You can connect from Tableau through a proxy to Snowflake. If you’re using Tableau version 2019.4 or later, you can configure it with the connector dialog by typing the required parameters in the Advanced tab.

For example:

proxy=http://proxyserver.company:80

For information about the parameters you should use, see the Snowflake documentation(Link opens in a new window).

Note: Tableau doesn't use a DSN to connect to Snowflake, so you can ignore the instructions in the Snowflake documentation about using a DSN.

If you’re using a version of Tableau before 2019.4, you can configure it by entering the parameters in a TDC file using odbc-extras.

For example:

Copy
<connection-customization class='snowflake' enabled='true' version='19.1'>
        <vendor name='snowflake' />
            <driver name='snowflake' />
                <customizations>
                <customization name='odbc-connect-string-extras' value='proxy=http://proxyserver.company:80' />
                </customizations></connection-customization>

For more information, see the Customise the Connection String for a Native Connector(Link opens in a new window) article.

Troubleshooting

Performance and Fetch Size

To get the best performance, especially for extracts, Tableau needs to determine an optimal fetch size. There are two ways to improve this: setting limits on variable length fields, and enabling resizable fetch buffers. To get the best results, you should use both.

Determining the current Fetch size

The fetch size used is logged in the tabprotosrv logs. Tabprotosrv is the driver sandbox process. Here is an example:

ODBCRowsetSource::ODBCRowsetSource: Attempting to set the row fetch size to 4,128 rows, with 254 bytes per row

Note: Some of the suggestions below require TDCs, but those won't work on Tableau Cloud unless you are using Tableau Bridge. With Tableau Bridge, you can install the TDC on the bridge host to have it apply to all connections going through that host.

Variable Field Length Limits

When using unbounded VARCHAR or VARBINARY fields, the driver will return the field size as 16 MB. This causes Tableau to use a small fetch size to stay within memory limits, which results in slow query speeds. There are several ways to address this:

  • Add a limit to the column definition on the database, such as VARCHAR(256), or wrap the table in a view which does the same.
  • Use the "Default VARCHAR size (bytes) field on the Advanced tab when connecting to Snowflake in Tableau Desktop. This was renamed from "Max VARCHAR size" in Tableau 2024.3, but it does the same thing. It sets the default_varchar_size parameter for the ODBC driver, which will limit the field size returned to Tableau. For more information, see https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters(Link opens in a new window).
  • Use a TDC customisation like below:

<connection-customization class='snowflake' enabled='true' version='10.0'>
<vendor name='snowflake' />
<driver name='snowflake' />
<customizations>
<customization name='CAP_ODBC_FETCH_BUFFERS_RESIZABLE' value='yes'/>
<customization name='odbc-connect-string-extras' value='default_varchar_size=512;default_binary_size=512'/>
</customizations>
</connection-customization>

Enable CAP_ODBC_FETCH_BUFFERS_RESIZABLE

This is enabled by default starting in Tableau 2024.3. Before that, you may use a TDC. You would use a TDC like the one below if you wanted to configure the default_varchar_size in the UI or on the database, rather than using the TDC.

<connection-customization class='snowflake' enabled='true' version='10.0'>
<vendor name='snowflake' />
<driver name='snowflake' />
<customizations>
<customization name='CAP_ODBC_FETCH_BUFFERS_RESIZABLE' value='yes'/>
</customizations>
</connection-customization>

Frequently asked questions

Here are some common problems and steps to resolution.

I have an error, "This Field XXX Does Not Exist", what do I do?

This error appears when you’re using a calculation field, adding it to the worksheet and replacing the data source with the Snowflake data (CustomSQL).

Use the Replace Field References function to resolve the error. For additional information on replacing field references, see Replace Field References.

 

See also

Thanks for your feedback!Your feedback has been successfully submitted. Thank you!