连接 Tableau 和 Azure Databricks

Tableau 是一个商业智能和数据可视化平台,可帮助用户通过创建交互式仪表板和报表来连接、分析和共享其数据,最终实现数据驱动的决策。 本文介绍如何从 Azure Databricks 连接到 Tableau Desktop,以及如何从 Tableau Desktop 或 Tableau Cloud 连接到 Azure Databricks。 本文还包含有关 Linux 上的 Tableau Server 的信息。

注意

若要从 Tableau Server 配置 Azure Databricks 登录,请参阅 从 Tableau Server 配置 Azure Databricks 登录

使用 Azure Databricks 作为 Tableau 的数据源时,可以通过缩放到大型数据集来提供强大的交互式分析,从而为业务分析师带来数据科学家和数据工程师的贡献。

在 Tableau Cloud 中从 Azure Databricks 进行探索

将 Azure Databricks用作 Tableau Cloud 的数据源时,可以直接通过 Databricks UI 从表或架构创建 Tableau 数据源。

要求

  • 数据必须位于 Unity Catalog 中,并且计算(群集)必须启用 Unity Catalog。 目前不支持 Hive Metastore。

浏览 Tableau Cloud 上的 Azure Databricks 表

  1. 登录到 Databricks 工作区,然后单击“数据”图标。在边栏中点击目录以打开目录浏览器。

  2. 从左上角的目录面板中选择计算资源。

  3. 打开目录,选择要浏览的架构或表。 请勿从 Hive 元存储或示例目录中进行选择。

  4. 在右上角,单击“与 BI 工具一起使用”以获取架构,或单击“在仪表板中打开”以查看表

  5. 从下拉菜单 中选择“在 Tableau Cloud 中浏览 ”。

  6. 验证所选 计算资源 和架构或表是否正确,然后单击 在 Tableau Cloud 中浏览

  7. 将打开一个新选项卡,并提示你登录到 Tableau Cloud 帐户。

  8. 登录到 Tableau 后,系统会提示你重新登录Azure Databricks。

  9. 登录到Azure Databricks后,可以在工作簿编辑器中开始生成 Tableau 仪表板。

功能和说明

  • 可以浏览表或架构。 浏览架构时,必须先从 Tableau 数据源 面板中选择一个表,然后才能开始生成仪表板。
  • Databricks 在发布到 Tableau Cloud 时强制将 OAuth 作为身份验证模式。
  • 已发布的数据源处于草稿模式,不会保存在任何位置。 必须在 Tableau Cloud 中保存它,以便其他人能够访问它。

连接 Tableau 和 Azure Databricks 的一般要求

连接信息

计算资源或 SQL 仓库的连接详细信息,特别是“服务器主机名”和“HTTP 路径”值。

将 Azure Databricks Unity 目录管理的数据连接到 Tableau Desktop

身份验证选项

使用以下身份验证选项之一:

  • (推荐)Microsoft Entra ID(以前Azure Active Directory)令牌或Microsoft Entra ID帐户凭据。

  • Azure Databricks 个人访问令牌

    注意

    作为安全最佳做法,在使用自动化工具、系统、脚本和应用进行身份验证时,Databricks 建议使用属于服务主体(而不是工作区用户)的个人访问令牌。 若要为服务主体创建令牌,请参阅管理服务主体的令牌

  • 用于计算机到计算机(M2M)身份验证的服务主体,该身份验证使用Service Principal OAuth OAuth 客户端凭据流。 需要满足以下条件:

    • 支持的 Tableau 产品:
      • 云或桌面 2025.2 或更高版本
      • 服务器或网桥 2025.3 或更高版本
    • Databricks ODBC 驱动程序 2.8.2 或更高版本

    注意

    仅支持 Azure Databricks 服务主体。 不支持Microsoft Entra ID服务主体。

Tableau Desktop 和 Tableau Cloud 默认使用单一刷新令牌以提高安全性。 若要关闭此功能,请参阅 单用刷新令牌

Microsoft Entra ID的所需角色

必须被分配为以下 Microsoft Entra ID 角色之一:

如果配置了管理员同意工作流,非管理员可以在登录时请求访问 Tableau。

将 Tableau Desktop 连接到 Azure Databricks

按照这些说明从 Tableau Desktop 连接到计算资源或 SQL 仓库。

  1. 启动 Tableau Desktop。

  2. 单击文件> 新建

  3. 在“数据”选项卡上,单击“连接数据”。

  4. 在连接器列表中,单击“Databricks”。

  5. 输入“服务器主机名”和“HTTP 路径”。

  6. 选择身份验证方法并输入所需信息(如果有)。

如果为工作区启用了 Unity 目录,请另外设置默认目录。 在“高级”选项卡中,为“连接属性”添加 Catalog=<catalog-name>。 要更改默认目录,请在“初始 SQL”选项卡中输入 USE CATALOG <catalog-name>

将 Tableau Cloud 连接到 Azure Databricks

按照这些说明从 Tableau Cloud 连接到计算资源或 SQL 仓库。

  1. 启动一个新工作簿

  2. 在菜单栏上,单击“数据”>“新数据源”。

  3. 在“连接到数据”页面上,单击连接器>Databricks

  4. 在Azure Databricks页上,输入 Server HostnameHTTP Path 值。

  5. 选择身份验证方法并输入所需信息(如果有)。

  6. 单击“登录”。

Linux 上的 Tableau Server

编辑 /etc/odbcinst.ini,使之包括以下内容:

[Simba Spark ODBC Driver 64-bit]
Description=Simba Spark ODBC Driver (64-bit)
Driver=/opt/simba/spark/lib/64/libsparkodbc_sb64.so

注意

Linux 上的 Tableau Server 建议使用 64 位处理体系结构。

从 Tableau Desktop 在 Tableau Cloud 上发布和刷新工作簿

本文演示如何将工作簿从 Tableau Desktop 发布到 Tableau Cloud,以及如何在数据源更改时使其保持更新。 需要 Tableau Desktop 中的工作簿Tableau Cloud 帐户。

  1. 从 Tableau Desktop 提取工作簿的数据:在 Tableau Desktop 中,显示要发布的工作簿后,单击“数据”><data-source-name>>“提取数据”。

  2. 在“提取数据”对话框中,单击“提取”。

  3. 浏览到本地计算机上要保存提取的数据的位置,然后单击“保存”。

  4. 将工作簿的数据源发布到 Tableau Cloud:在 Tableau Desktop 中,单击“服务器”>“发布数据源”><data-source-name>

  5. 如果显示“Tableau Server 登录”对话框,请单击“Tableau Cloud”链接,然后按照屏幕上的说明登录到 Tableau Cloud。

  6. 在“将数据源发布到 Tableau Cloud”对话框中,单击“未启用刷新”旁边的“编辑”链接。

  7. 在显示的浮出控件内,将“身份验证”从“未启用刷新”更改为“允许刷新访问”。

  8. 要隐藏该浮出控件,请单击其外部的任意位置。

  9. 选择“更新工作簿以使用已发布数据源”。

  10. 单击“发布”。 Tableau Cloud 中会显示数据源。

  11. 在 Tableau Cloud 的“发布完成”对话框中,单击“计划”,然后按照屏幕上的说明操作。

  12. 将工作簿发布到 Tableau Cloud:在 Tableau Desktop 中(其中显示了要发布的工作簿),单击“服务器”>“发布工作簿”。

  13. 在“将工作簿发布到 Tableau Cloud”对话框中,单击“发布”。 在 Tableau Cloud 中显示工作簿。

Tableau Cloud 根据你设置的计划检查对数据源的更改,如果检测到更改,则更新已发布的工作簿。

有关详细信息,请参阅 Tableau 网站上的以下内容:

最佳做法和故障排除

用于优化 Tableau 查询的两个基本操作是:

  • 减少在单个图表或仪表板中要查询和可视化的记录数。
  • 在单个图表或仪表板中减少 Tableau 发送的查询数量。

确定先尝试哪一个取决于你的仪表板。 如果在同一仪表板中为单个用户提供了许多不同的图表,则 Tableau 可能会发送过多的查询来Azure Databricks。 如果只有几个图表,但它们需要很长时间才能加载,则Azure Databricks正在返回过多的记录,从而影响了加载效率。

Tableau Desktop 和 Tableau Server 上都提供 Tableau 性能记录,通过识别在运行特定工作流或仪表板时导致延迟的进程来帮助识别性能瓶颈。

启用性能记录以调试任何 Tableau 问题

例如,如果查询执行存在问题,则你知道它与数据引擎进程有关或者与正在查询的数据源有关。 如果视觉布局的执行速度缓慢,你就会知道问题出在 VizQL。

如果性能记录显示延迟发生在执行查询过程中,很可能是因为 Azure Databricks 或 ODBC/Connector 覆盖层需要花费过多时间返回结果或将数据处理到用于 VizQL 的 SQL 中。 出现这种情况时,应分析返回的内容,并尝试更改分析模式,使每个组、段或项目都有一个仪表板,而不是尝试将所有内容都塞到一个仪表板中并依赖于快速筛选器。

如果性能不佳是由于排序或视觉布局引起的,则问题可能出在仪表板尝试返回的标记的数量。 Azure Databricks可以快速返回 100 万条记录,但 Tableau 可能无法计算布局并对结果进行排序。 如果这是一个问题,请聚合查询并深化到更低的级别。 还可以尝试更大的计算机,因为 Tableau 仅受运行它的计算机上的物理资源的约束。

有关性能记录器的深入教程,请参阅创建性能记录

Tableau Server 与 Tableau Desktop 的性能对比

一般来说,在 Tableau Desktop 上运行的工作流在 Tableau Server 上并不会更快。 不在 Tableau Desktop 上执行的仪表板将不会在 Tableau Server 上执行。

使用 Desktop 是一种更好的故障排除技术,因为 Tableau Server 在进行故障排除时要考虑的流程更多。 如果在 Tableau Desktop 中正常工作,但在 Tableau Server 中不工作,则可以安全地将问题范围缩小到 Tableau Server 中(不在 Tableau Desktop 中)的进程。

配置

默认情况下,连接 URL 中的参数会替代 Simba ODBC DSN 中的参数。 可以通过两种方式自定义 Tableau 中的 ODBC 配置:

  • 单个数据源的 .tds 文件:

    1. 按照保存数据源中的说明导出数据源的 .tds 文件。
    1. 查找 odbc-connect-string-extras='' 文件中的属性行 .tds 并设置参数。 例如,若要启用 AutoReconnectUseNativeQuery,可以将行更改为 odbc-connect-string-extras='AutoReconnect=1,UseNativeQuery=1'

    2. 通过重新连接,重新加载 .tds 文件。

    计算资源经过优化,可使用较少的堆内存来收集大型结果,因此与 Simba ODBC 的默认值相比,它可以为每个提取块处理更多行。 将 RowsFetchedPerBlock=100000' 追加到 odbc-connect-string-extras 属性的值。

  • 所有数据源的 .tdc 文件:

    1. 如果从未创建过 .tdc 文件,则可将 TableauTdcExample.tdc 添加到文件夹 Document/My Tableau Repository/Datasources

    2. 将此文件添加到所有开发人员的 Tableau Desktop 安装,以便在共享仪表板时此文件可以发挥作用。

优化图表(工作表)

可以通过很多战术性图表优化来提高 Tableau 工作表的性能。

对于不经常更改且不应与之交互的筛选器,请使用上下文筛选器,这会缩短执行时间。 根据经验,另一种好的做法是在查询中使用 if/else 语句而非 case/when 语句。

Tableau 可以将筛选器向下推送到数据源中,这可以提高查询速度。 有关数据源向下推送筛选器的详细信息,请参阅使用参数跨多个数据源进行筛选跨多个数据源筛选数据

尽可能避免表格计算,因为表格计算会扫描完整数据集。 有关表计算的详细信息,请参阅通过表计算转换值

优化仪表板

下面是一些提示和故障排除练习,你可以应用这些练习来改善 Tableau 仪表板的性能。

使用连接到 Azure Databricks 的 Tableau 仪表板时,单个仪表板上的快速过滤器可能会为多种不同的用户、功能或细分市场带来常见的问题来源。 可以将快速筛选器附加到仪表板上的所有图表。 一个包含五个图表的仪表板上的快速筛选器会导致至少 10 个查询发送到Azure Databricks。 添加更多筛选器后,此数字可能会上升,导致性能问题,因为 Spark 不适合处理多个同一时刻开始的并发查询。 当使用的Azure Databricks群集或 SQL 仓库不足以处理大量查询时,这变得更加有问题。

建议你首先使用 Tableau 性能记录来排查问题原因。

如果是排序或视觉对象布局导致性能不佳,则问题可能出在仪表板尝试返回的标记数。 Azure Databricks可以快速返回 100 万条记录,但 Tableau 可能无法计算布局并对结果进行排序。 如果这是一个问题,请聚合查询并深化到更低的级别。 你还可以尝试更大的计算机,因为 Tableau 仅受运行它的计算机上的物理资源的限制。

若要了解 Tableau 中的向下钻取,请参阅向下钻取详细信息

如果看到很多粒度标记,则表明分析模式不太好,因为它不提供见解。 从更高的聚合级别向下钻取会更有意义,可减少必须处理和可视化的记录数。

使用操作来优化仪表板

使用 Tableau 操作单击一个标记(例如,地图上的状态),将其发送到另一个仪表板,该仪表板会根据你单击的状态进行筛选。 使用 _actions 会减少在一个仪表板上设置多个筛选器的需求,也会减少需要生成的记录数量。 (正在设置操作,使其在获取用于筛选的谓词之前不会生成记录

有关详细信息,请参阅操作提高仪表板性能的 6 大诀窍

缓存

缓存数据是提高工作表或仪表板性能的好办法。

Tableau 中的缓存

Tableau 在检索数据之前存在四层缓存,无论该数据是否通过实时连接或是从数据提取中获得。

  • 磁贴:如果有人加载相同的仪表板且没有任何变化,Tableau 会尝试为图表重复使用相同的磁贴。 这类似于 Google Maps 磁贴。
  • 模型:如果无法使用磁贴缓存,则会使用数学计算的模型缓存来生成可视化效果。 Tableau Server 会尝试使用相同的模型。
  • 抽象:查询的聚合结果也会进行存储。 这是第三个“防御”级别。 如果以前的某个查询返回 Sum(Sales)、Count(orders)、Sum(Cost),而未来的某个查询只需要 Sum(Sales),则 Tableau 会获取该结果并使用它。
  • 本机缓存:如果查询与另一个查询相同,则 Tableau 会使用相同的结果。 这是最后一级别的缓存。 如果此操作失败,Tableau 会访问数据。

Tableau 中的缓存频率

Tableau 的管理设置可以调整缓存的频率,即增加或减少缓存频率。 如果将服务器设置为“降低刷新频率”,则 Tableau 会将数据保留在缓存中长达 12 小时。 如果将服务器设置为“提高刷新频率”,则 Tableau 会在每次刷新页面时返回到数据。

如果客户反复使用同一仪表板(例如,“周一早晨的管道报表”),则应将其所在的服务器设置为“降低刷新频率”,使仪表板全都使用同一缓存。

Tableau 中的缓存预热

可以在 Tableau 中预热缓存,方法是:设置要在查看仪表板之前发送的仪表板订阅。 (必须呈现仪表板才能生成订阅电子邮件图像。)请参阅使用订阅预热 Tableau Server 缓存

Tableau Desktop:错误 The drivers... are not properly installed

问题:尝试将 Tableau Desktop 连接到 Databricks 时,Tableau 会在连接对话框中显示一条错误消息,其中包含指向驱动程序下载页的链接,你可以在该页中找到驱动程序链接和安装说明。

原因:安装 Tableau Desktop 时未运行受支持的驱动程序。

解决方案:下载 Databricks ODBC 驱动程序版本 2.6.15 或更高版本。

另请参阅:Tableau 网站上的错误“驱动程序…未正确安装”

主键/外键约束

若要将主键(PK)和外键(FK)约束从Azure Databricks传播到 Tableau,必须了解这两个平台在约束方面的功能和限制。

了解Azure Databricks约束

Azure Databricks支持从 Databricks Runtime 15.2 开始的主键和外键约束。 这些约束是信息性的,默认情况下不强制实施,这意味着它们无法阻止数据完整性冲突,但它们可用于优化查询并提供有关数据关系的元数据。 请参阅声明主键和外键关系

了解 Tableau 使用约束来创建表关系

Tableau 不直接强制实施主键和外键约束。 相反,Tableau 使用关系来为数据连接建模。 要在 Tableau 中使用约束,必须了解 Tableau 的数据模型会提供两个级别的建模:逻辑层和物理层。 请参阅 Tableau 数据模型。 下面讨论了此两级数据模型对被识别为 Tableau 中关系的Azure Databricks约束的影响。

将Azure Databricks连接到 Tableau

Azure Databricks连接到 Tableau 时,Tableau 会尝试在表之间的物理层上根据现有的关键约束和匹配字段创建关系。 Tableau 根据Azure Databricks中定义的主键和外键约束自动尝试检测和创建物理层之间的关系。 如果未定义任何键约束,则 Tableau 会使用匹配的列名称自动生成联接。 在逻辑层,仅使用单列名称匹配来确定关系。 在物理层,这种列名称匹配可检测简单(单列)和复合(多列)键关系。

如果 Tableau 无法确定匹配字段,则必须通过提供列、条件和约束类型来手动指定物理层中两个表之间的联接关系。 若要从 UI 中的逻辑层切换到物理层,请双击逻辑层中的表。

其他资源