Snowflake

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

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

  • 为了支持对 Snowflake 使用密钥对身份验证,必须安装 Snowflake 提供的版本 3.4.0 或更高版本的 ODBC 驱动程序。
  • 从版本 2024.3 开始,以及在 Tableau Server 版本 2025.1 中,密钥对身份验证适用于 Tableau Desktop Tableau Cloud
  • Web 制作不支持使用 Snowflake 密钥对身份验证发布工作簿和数据源。您必须使用 Tableau Desktop 创建工作簿或数据源,这些工作簿或数据源随后可发布到您的站点 。

重要信息: 自 2025 年 5 月起,Snowflake 已停用单重身份验证(用户名和密码)。
- 更多信息可在此处找到: Snowflake 提前需要 MFA (链接在新窗口中打开)
- 查看这篇 Tableau 知识库文章以采取措施并确保 Tableau 中的 Snowflake 连接不间断: Snowflake 弃用单重身份验证 (链接在新窗口中打开)

开始之前

在开始之前,请收集以下连接信息:

  • 您选择的身份验证方法所需的登录凭据。

    注意 :如果您使用密钥对身份验证,则需要使用 OpenSSL 3.x 或更高版本来创建密钥。

  • (可选)要在每次 Tableau 连接时运行的初始 SQL 语句。
  • (可选)用于此连接的任何自定义驱动程序参数或新的默认 VARCHAR 大小。

注意 :若要将 Tableau Cloud Tableau Server 与密钥对身份验证结合使用,您还必须在 Tableau Cloud 或 Tableau Server 中保存凭据,然后才能发布工作簿进行共享。有关详细信息,请参见 配置 Snowflake 进行密钥对身份验证

需要驱动程序

此连接器需要驱动程序才能与数据库通信。如果计算机上未安装该驱动程序,Tableau 将在连接对话框中显示一条错误消息,其中包含指向 驱动程序下载 (链接在新窗口中打开) 页面的链接,您可在该页面中找到驱动程序链接和安装说明。

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

进行连接并设置数据源

选择 Snowflake 作为连接后,将显示一个包含三个选项卡的对话。使用 “常规” 选项卡选择服务器、仓库和身份验证类型。若要在每次连接开始时选择运行 SQL 命令,您可以使用 “初始 SQL” 选项卡。有关详细信息,请参见 运行初始 SQL 。最后,您可以使用 “高级” 选项卡选择性地添加自定义驱动程序参数和默认 VARCHAR 大小。

有关如何为 Tableau 和 Snowflake 之间的连接配置 OAuth 的信息,请参见 为 Snowflake 连接配置 OAuth (链接在新窗口中打开) Snowflake 的外部 OAuth

将 Tableau 连接到数据

  1. “连接” 屏幕上的 “到服务器” 下,选择 “更多” ,然后选择 “Snowflake”
  2. “常规” 选项卡上,输入要连接到的服务器的名称。
  3. (可选)输入 “角色” “仓库”
  4. 选择您将使用的身份验证方法: 用户名和密码 Okta 用户名和密码 使用 OAuth 登录 使用密钥对登录
  5. (可选)如果要在每次连接开始时运行 SQL 命令,请选择 “初始 SQL” 。有关详细信息,请参见 运行初始 SQL
  6. (可选)对于 Tableau Desktop 和 Server,在 “高级” 选项卡上输入您希望用于此连接的任何自定义参数。(在 Tableau Cloud 上不可用)
  7. 完成所选身份验证方法的登录步骤:
    • 使用 OAuth 登录:
      1. 单击 “登录”
      2. 在打开的网页中,通过输入“用户名”和“密码”并选择“登录”,从而登录到 Snowflake。或者,如果 Snowflake 配置为支持 SSO,则选择“单点登录”。
      3. 单击 “确定” 确认授权访问您的 Snowflake 数据。
    • 用户名和密码:
      1. 输入用户名和可选密码。 (注意: 如果使用编程访问令牌,请输入与令牌关联的用户名,并在 “密码” 字段中输入令牌字符串。)
      2. 单击 “登录”
    • Okta 用户名和密码:
      1. 输入用户名和可选密码。
      2. 输入可选的 SAML IdP(您的 Okta 服务器的 URL)。
      3. 单击 “登录”
    • 使用密钥对登录
      1. “服务器” 中,输入 Snowflake 服务器地址。
      2. 输入 “仓库” 并选择输入 “角色”
      3. “身份验证” 中,选择 “使用密钥对登录”
      4. 输入与这些密钥关联的 “用户名”
      5. “私钥文件” 中,浏览到包含您的私钥的 .p8 文件。
      6. (可选)如果私钥文件受密码保护,请输入 “私钥文件密码”
  8. 接下来,按照“设置数据源”下的说明进行操作。
  9. 如果 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。有关详细信息,请参见 自定义和调整连接

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

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

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

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

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

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

有关另一个自定义驱动程序参数示例,请参见 为 Snowflake 使用代理

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

注意: 如果您需要自定义项而不将其嵌入到数据源中,您可以在 Windows 的注册表中配置参数(只有标记为“配置参数”的参数可用)。有关驱动程序参数的详细信息,请参见 Snowflake 网站上的 ODBC Configuration and Connection Parameters(ODBC 配置和连接参数)

设置数据源

在数据源页面上,执行下列操作:

  1. (可选)在页面顶部选择默认数据源名称,然后输入要在 Tableau 中使用的唯一数据源名称。例如,使用可帮助其他数据源用户推断出要连接的数据源的数据源命名约定。

  2. “仓库” 下拉列表中,选择仓库或使用文本框按名称搜索仓库。

    注意: 如果您将此项留空,并且不选择仓库,Tableau 将使用默认的 Snowflake 虚拟仓库。

    有关详细信息,请参见 Snowflake 中的默认虚拟仓库

  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 文档 (链接在新窗口中打开)

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

如果您使用 2019.4 之前的 Tableau 版本,则可以通过使用 odbc-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>

有关详细信息,请参见 自定义本机连接器的连接字符串 (链接在新窗口中打开)

疑难解答

性能和获取大小

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

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

确定当前获取大小

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

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

变量字段长度限制

当使用无界 VARCHAR 或 VARBINARY 字段时,驱动程序将返回字段大小 16 MB。这会导致 Tableau 使用较小的获取大小来保持在内存限制内,从而导致查询速度变慢。可通过几种方式来解决此问题:

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

常见问题

下面是一些常见问题和解决步骤。

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

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

使用 “替换字段引用” 功能来解决错误。有关替换字段引用的其他信息,请参见 替换字段引用

另请参见

感谢您的反馈! 您的反馈已成功提交。谢谢!