---
schema_version: "1"
id: e8520d310162b32fdc6ab8bf08158852388ce46105a7706e13083fd51f610044
title: Snowflake
collection: tableau
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/next/zh-cn/pro/desktop/examples_snowflake.md
canonical_url: https://help.tableau.com/v0.0/pro/desktop/zh-cn/examples_snowflake.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 3ea2105bb0315bb0042e005119aed6e5cad6c30146ff0838a70fac056cec5651
description: Connect Tableau to a Snowflake data warehouse and set up the data source.
---
[跳转到主要内容](#main-content)

# Snowflake

本文介绍如何将 Tableau 连接到 Snowflake 数据仓库并设置数据源。

## 使用说明：使用 Snowflake 进行密钥对身份验证

- 为了支持对 Snowflake 使用密钥对身份验证，必须安装 Snowflake 提供的版本 3.4.0 或更高版本的 ODBC 驱动程序。
- 从版本 2024.3 开始，以及在 Tableau Server 版本 2025.1 中，密钥对身份验证适用于 Tableau Desktop、Tableau Prep 和 Tableau Cloud。
- 您保存的凭据必须完全匹配（包括角色），以便在发布具有与 Tableau Server 的嵌入式 Snowflake OAuth 连接的工作簿时，特定用户名选项可用。如果您开发的工作簿具有包含角色的连接，但 Tableau Server 上保存的凭据未包括该角色，则 specific-username 选项将不可用。
- Web 制作不支持发布和编辑带有 Snowflake 密钥对身份验证的工作簿和数据源。您必须使用 Tableau Desktop 创建和编辑工作簿或数据源，这些工作簿或数据源随后可发布到您的站点 。

**注意：**自 2025 年 5 月起，Snowflake 已停用单重身份验证（用户名和密码）。  
\- 更多信息可在此处找到：[Snowflake 提前需要 MFA](https://docs.snowflake.com/en/user-guide/security-mfa-rollout#requiring-mfa-ahead-of-schedule "链接到 MFA 上的 Snowflake 用户文档")。  
\- 查看这篇 Tableau 知识库文章以采取措施并确保 Tableau 中的 Snowflake 连接不间断：[Snowflake 弃用单重身份验证](https://help.salesforce.com/s/articleView?id=004810953&type=1 "链接到知识库文章 ")

**重要信息：**在某些情况下，可能会显示错误：  
\[Snowflake\]\[Support\] (40470) Conversion error at column... numeric value out of range（\[Snowflake\]\[支持\] (40470) ... 列处出现转换错误，数值超出范围）。错误代码：A3E43C3B  
\- 查看这篇 Tableau 知识库文章以采取措施并确保 Tableau 中的 Snowflake 连接不间断：[Snowflake 弃用单重身份验证](https://help.salesforce.com/s/articleView?id=004810953&type=1 "链接到知识库文章 ")

## 开始之前

在开始之前，请收集以下连接信息：

- 要连接到的服务器的名称
- 身份验证方法：
    
    - **OAuth**：如果要启用来自 IdP 的联合，请使用此方法。
    - **OAuth 客户端凭据**：使用客户端 ID 和密文来启用计算机到计算机类型的用例。有关 Snowflake 客户端凭据的详细信息，请参见[为 Snowflake 配置外部 OAuth：客户端凭据流程](https://help.tableau.com/v0.0/pro/desktop/zh-cn/config_oauth_snowflake_client_creds.htm)。**注意：**此选项是 2026.2 中的新增选项。
    - **用户名和密码**：如果您想在 Snowflake 中存储用户凭据，请使用此方法。
    - **Okta 用户名和密码**：如果您计划使用 Okta 来管理您的身份验证，请使用此方法。
    - 密钥对身份验证：使用公钥和私钥对凭据建立更强的安全连接。
    - 编程访问令牌：请参见 Snowflake 的[先决条件](https://docs.snowflake.com/en/user-guide/programmatic-access-tokens#prerequisites "使用编程访问令牌进行身份验证的 Snowflake 先决条件")，以验证您使用的 Snowflake 帐户是否满足使用编程访问令牌的所有文档化要求。有关如何创建 Snowflake 编程访问令牌的详细信息，请参见[生成编程访问令牌](https://docs.snowflake.com/en/user-guide/programmatic-access-tokens#generating-a-programmatic-access-token "在 Snowflake 中创建编程访问令牌")。

- 您选择的身份验证方法所需的登录凭据。
    
    **注意**：如果您使用密钥对身份验证，则需要使用 OpenSSL 3.x 或更高版本来创建密钥。
- （可选）要在每次 Tableau 连接时运行的初始 SQL 语句。
- （可选）用于此连接的任何自定义驱动程序参数或新的默认 VARCHAR 大小。

**注意**：若要将 Tableau Cloud 或 Tableau Server 与密钥对身份验证结合使用，您还必须在 Tableau Cloud 或 Tableau Server 中保存凭据，然后才能发布工作簿进行共享。有关详细信息，请参见[配置 Tableau 进行 Snowflake 密钥对身份验证](https://help.tableau.com/v0.0/pro/desktop/zh-cn/snowflake_key_pair_auth.htm)。

### 需要驱动程序

此连接器需要驱动程序才能与数据库通信。如果计算机上未安装该驱动程序，Tableau 将在连接对话框中显示一条错误消息，其中包含指向[驱动程序下载](https://www.tableau.com/zh-cn/support/drivers)页面的链接，您可在该页面中找到驱动程序链接和安装说明。

**注意：**为了支持对 Snowflake 使用密钥对身份验证，必须安装 Snowflake 提供的版本 3.4.0 或更高版本的 ODBC 驱动程序。

## 进行连接并设置数据源

选择 Snowflake 作为连接后，将显示一个包含三个选项卡的对话。使用“常规”选项卡选择服务器、仓库和身份验证类型。若要在每次连接开始时选择运行 SQL 命令，您可以使用“初始 SQL”选项卡。有关详细信息，请参见[运行初始 SQL](https://help.tableau.com/v0.0/pro/desktop/zh-cn/connect_basic_initialsql.htm)。最后，您可以使用“高级”选项卡选择性地添加自定义驱动程序参数和默认 VARCHAR 大小。

有关如何为 Tableau 和 Snowflake 之间的连接配置 OAuth 的信息，请参见[为 Snowflake 连接配置 OAuth](https://help.tableau.com/v0.0/pro/desktop/zh-cn/snowflake_oauth.htm)和[Snowflake 的外部 OAuth](https://help.tableau.com/v0.0/pro/desktop/zh-cn/snowflake_oauth_idp.htm)。

### 将 Tableau 连接到数据

1. 在“连接”屏幕上的“到服务器”下，选择“更多” ，然后选择“Snowflake”。
2. 在“常规”选项卡上，输入要连接到的服务器的名称。
3. （可选）输入“角色”和“仓库”。
4. 选择您将使用的身份验证方法：“使用 OAuth 登录”、“用户名和密码”、“Okta 用户名和密码”或“使用密钥对登录”。
5. （可选）如果要在每次连接开始时运行 SQL 命令，请选择“初始 SQL”。有关详细信息，请参见[运行初始 SQL](https://help.tableau.com/v0.0/pro/desktop/zh-cn/connect_basic_initialsql.htm)。
6. （可选）对于 Tableau Desktop 和 Server，在“高级”选项卡上输入您希望用于此连接的任何自定义参数。（在 Tableau Cloud 上不可用）
7. 完成所选身份验证方法的登录步骤：
    - 使用 OAuth 登录：
        
        1. 单击“登录”。
        2. 在打开的网页中，通过输入“用户名”和“密码”并选择“登录”，从而登录到 Snowflake。或者，如果 Snowflake 配置为支持 SSO，则选择“单点登录”。
        3. 单击“确定”确认授权访问您的 Snowflake 数据。
    - 使用 OAuth 客户端凭据登录（此选项自 2026.2 起可用）：
        
        1. 输入客户端 ID 作为“用户名”，输入客户端密文作为“密码”。
        2. 输入“OAuth 令牌请求 URL”和“OAuth 范围”（在大多数情况下，这些是必需的）。
        3. 单击“登录”。
    - 用户名和密码：
        
        1. 输入用户名和可选密码。
        2. 单击“登录”。
    - 用户名和密码（使用编程访问令牌）：
        
        1. 在“密码”字段中输入与令牌关联的用户名和令牌字符串。
        2. 单击“登录”。
    - Okta 用户名和密码：
        
        1. 输入用户名和可选密码。
        2. 输入可选的 SAML IdP（您的 Okta 服务器的 URL）。
        3. 单击“登录”。
    - 使用密钥对登录：
        
        1. 在“服务器”中，输入 Snowflake 服务器地址。
        2. 输入“仓库”并选择输入“角色”。
        3. 在“身份验证”中，选择“使用密钥对登录”。
        4. 输入与这些密钥关联的“用户名”。
        5. 在“私钥文件”中，浏览到包含您的私钥的 .p8 文件。
        6. （可选）如果私钥文件受密码保护，请输入“私钥文件密码”。
8. 接下来，按照“设置数据源”下的说明进行操作。

如果 Tableau 无法建立连接，请验证您的凭据是否正确。如果仍然无法连接，则说明您的计算机在定位服务器时遇到问题。请与您的网络管理员或数据库管理员联系以获得更多帮助。

### 访问令牌超时：始终验证访问令牌 TDC

Snowflake 访问令牌 10 分钟后过期。在某些数据提取刷新过程中，当访问令牌过期时，将在作业的稍后阶段建立新的连接。为了解决这个问题，我们添加了一项新功能，该功能从 Tableau 2024.2 开始默认启用。若要在旧版本中启用此功能，您可以使用以下 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>
```

通过将此 TDC 包含在 Tableau 存储库数据源文件夹中，可将其与 Tableau Desktop 或 Tableau Server 一起使用。对于 Tableau Cloud，您可以使用 Bridge 并通过那里连接配置自定义 TDC。有关详细信息，请参见[自定义和调整连接](https://help.tableau.com/v0.0/pro/desktop/zh-cn/connect_customize.htm)。

**注意：**流程不支持嵌入式 TDC。

### 使用驱动程序参数自定义连接

您可通过将驱动程序参数附加到“高级”选项卡中的连接字符串来修改使用 Snowflake 连接器建立的连接。

**注意：**您无法更改 Tableau 生成的驱动程序参数，您只能附加参数。

例如，此语法指定未满足 `no_proxy` 值时要使用的代理服务器，并且允许主机名绕过代理服务器:

Proxy=http://proxyserver.company:80;no\_proxy=.trustedserver.com;

有关另一个自定义驱动程序参数示例，请参见[为 Snowflake 使用代理](#Use)。

您还可以在“默认 VARCHAR 大小（字节）”字段中输入 VARCHAR 的替代大小。有关使用此字段及其对性能的影响的更多详细信息，请参见 Snowflake ODBC 文档。

**注意：**如果您需要自定义项而不将其嵌入到数据源中，您可以在 Windows 的注册表中配置参数（只有标记为“配置参数”的参数可用）。有关驱动程序参数的详细信息，请参见 Snowflake 网站上的 [ODBC Configuration and Connection Parameters（ODBC 配置和连接参数）](https://docs.snowflake.com/en/user-guide/odbc-parameters.html)。

### 设置数据源

在数据源页面上，执行下列操作：

1. （可选）在页面顶部选择默认数据源名称，然后输入要在 Tableau 中使用的唯一数据源名称。例如，使用可帮助其他数据源用户推断出要连接的数据源的数据源命名约定。
2. 从“仓库”下拉列表中，选择仓库或使用文本框按名称搜索仓库。
    
    **注意：**如果您将此项留空，并且不选择仓库，Tableau 将使用默认的 Snowflake 虚拟仓库。
    
    有关详细信息，请参见[Snowflake 中的默认虚拟仓库](#Default)。
3. 在“数据库”下拉列表中，选择数据库或使用文本框按名称搜索数据库。
4. 在“架构”下拉列表中，选择架构或使用文本框按名称搜索架构。
5. 在“表”下，选择表或使用文本框按名称搜索表。
6. 将表拖到画布，然后选择工作表标签以开始分析。

**注意**：如果在使用密钥对身份验证时发布工作簿，请确保在**“发布工作簿”**窗口的**“管理数据源”**部分选择正确的身份验证类型。

## 登录到 Mac

如果在 Mac 上使用 Tableau Desktop，则在输入服务器名称进行连接时，请使用完全限定的域名（例如 mydb.test.ourdomain.lan）而不是相对域名（例如 mydb 或 mydb.test）。

或者，可以将域添加到 Mac 计算机的“搜索域”的列表中，以便在您连接时，只需要提供服务器名称。若要更新“搜索域”的列表，请转到“系统首选项”\>“网络”\>“高级”，然后打开“DNS”选项卡。

## Snowflake 中的默认虚拟仓库

当您创建 Snowflake 数据源时，您正在创建 Snowflake 仓库（用于计算资源）和 Snowflake 数据库（用于数据资源）。仓库和数据库都需要权限才能访问。假设您拥有每个仓库和数据库的权限，您可以根据您需要的计算能力使用不同的仓库访问同一数据库。

创建数据源时，您可以选择从下拉列表中选择仓库。如果您将此项留空，并且不选择仓库，Tableau 将使用默认的 Snowflake 虚拟仓库。如果您随后发布该数据源或工作簿，当用户连接时，Tableau 将使用该用户的的默认 Snowflake 虚拟仓库。

应为每个用户分配一个默认仓库，以便 Tableau 可以将该仓库用作默认仓库，以便从 Snowflake 数据源中打开工作簿。

## 为 Snowflake 使用代理

您可以通过代理从 Tableau 连接到 Snowflake。如果使用 Tableau 版本 2019.4 或更高版本，则可以使用连接器对话框，通过在**“高级”**选项卡中键入所需的参数来配置它。

例如：

`proxy=http://proxyserver.company:80`

有关应使用的参数的信息，请参见 [Snowflake 文档](https://docs.snowflake.net/manuals/user-guide/odbc-parameters.html)。

**注意**：Tableau 不使用 DSN 连接到 Snowflake，因此您可以忽略 Snowflake 文档中有关使用 DSN 的说明。

如果您使用 2019.4 之前的 Tableau 版本，则可以通过使用 `odbc-connect-string-extras` 在 TDC 文件中输入参数来配置它。

例如：

复制

```
<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>
```

有关详细信息，请参见[自定义本机连接器的连接字符串](https://help.tableau.com/current/pro/desktop/zh-cn/connect_string_custom.htm)。

## 疑难解答

一个很好的资源是 Snowflake 网站上的[将 Tableau 与 Snowflake 结合使用的最佳做法](https://resources.snowflake.com/ebooks/best-practices-for-using-tableau-with-snowflake)（需要注册）。

### 性能和获取大小

为了获得最佳性能，尤其是对于数据提取，Tableau 需要确定最佳获取大小。可以通过对可变长度字段设置限制来改善这一点。

此外，从 2024.3 版的 Tableau Desktop 和 Tableau Server 开始，以及从 2025.1 版的 Tableau Cloud 开始，Tableau 继续通过 Snowflake 连接的获取大小来提高性能。

#### 确定当前获取大小

使用的获取大小记录在 tabprotosrv 日志中。Tabprotosrv 是驱动程序沙盒进程。下面是一个示例：

ODBCRowsetSource::ODBCRowsetSource：尝试将行提取大小设置为 4128 行，每行 254 个字节

#### 变量字段长度限制

当使用无界 VARCHAR 或 VARBINARY 字段时，驱动程序将返回字段大小 16 MB。这会导致 Tableau 根据声明的最大长度而不是实际数据大小分配内存。因此，Tableau 使用较小的获取大小来保持在内存限制内，这会导致严重的性能和内存问题。

可通过几种方式来解决此问题：

- 对数据库的列定义添加一个限制，例如 VARCHAR(256)，或者将表包装在执行相同操作的视图中。
- 在 Tableau Desktop 中连接到 Snowflake 时，使用“高级”选项卡上的“默认 VARCHAR 大小（字节）”字段。这是从 Tableau 2024.3 中的“最大 VARCHAR 大小”重命名而来的，但它的作用是一样的。它为 ODBC 驱动程序设置 `default_varchar_size parameter`，这将限制返回到 Tableau 的字段大小。有关详细信息，请参见 Snowflake 文档中的 [ODBC 配置和连接参数](https://docs.snowflake.com/en/developer-guide/odbc/odbc-parameters "Snowflake 文档的外部链接")。

### 错误：\[Snowflake\]\[Support\] (40470) Conversion error at column... numeric value out of range（\[Snowflake\]\[Support\] （40470）... 列处出现转换错误，数值超出范围）。错误代码：A3E43C3B

添加此错误是为了在 Snowflake 数据源的 `NUMERIC` 数据类型字段包含的数值超出 Tableau 支持的允许 `Number (Whole)` 范围时提醒客户。

在 Snowflake 与 Tableau 的连接中，当使用 `Number (Whole)` 时，`NUMERIC` 数据类型字段会以 `SQL_C_SBIGINT` 字段形式被检索。`Number (Whole)` 范围是从 `9,223,372,036,854,775,807` 到 `-9,223,372,036,854,775,808` 的值。`NUMERIC` 数据类型的最大精度为 38 位。

若要解决此问题，请将问题字段的数据类型从 `Number (Whole)` 更改为 `Number (Decimal)` 或 `String`。

- 与数据库管理员合作，确定哪个字段可能包含大于允许范围的值。
- 或者，将数据连接中的任何 `Number (Whole)` 数据类型逐个修改为 `Number (Decimal)` 或 `String`，直到不再显示错误。

有关如何在 Tableau 中更改字段数据类型的信息，请参见[数据类型](https://help.tableau.com/v0.0/pro/desktop/zh-cn/datafields_typesandroles_datatypes.htm "在 Tableau 中更改字段类型")。

### 错误：PROGRAMMATIC\_ACCESS\_TOKEN NO 390422 INCOMING\_REQUEST\_BLOCKED

打开使用嵌入式编程访问令牌连接到 Snowflake 的内容时，此错误指示客户端 IP 地址尚未列入白名单。

若要解决此问题，请确保将错误消息中包括的客户端 IP 添加到 Snowflake 白名单。有关详细信息，请参见有关[使用编程访问令牌进行身份验证](https://docs.snowflake.com/en/user-guide/programmatic-access-tokens#label-pat-prerequisites-network)的 Snowflake 文档。

## 常见问题

我有一个错误“此字段 XXX 不存在”。我该怎么办？

当您使用计算字段、将其添加到工作表并将数据源替换为 Snowflake 数据 (CustomSQL) 时，会出现此错误。

使用**“替换字段引用”**功能来解决错误。有关替换字段引用的其他信息，请参见[替换字段引用](https://help.tableau.com/current/pro/desktop/zh-cn/howto_connect.htm)。

## 另请参见

- [设置数据源](https://help.tableau.com/v0.0/pro/desktop/zh-cn/datasource_prepare.htm) – 向此数据源中添加更多数据，或者在分析数据之前准备数据。
- [构建图表和分析数据](https://help.tableau.com/v0.0/pro/desktop/zh-cn/design_and_analyze.htm) – 开始数据分析。

## 此部分中的其他文章