连接 Tableau 和 Azure Databricks

本文介绍如何从 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 和 Azure Databricks 的要求

将 Tableau Desktop 连接到 Azure Databricks

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

  1. 启动 Tableau Desktop。

  2. 单击“文件”>“新建”。

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

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

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

  6. 对于“身份验证”,选择你的身份验证方法并输入身份验证凭据,然后单击“登录”。

    • 若要使用 Microsoft Entra ID 令牌,请选择“个人访问令牌”,然后为“密码”输入你的 Microsoft Entra ID 令牌作。

    • 若要使用 Azure Databricks 个人访问令牌,请选择“个人访问令牌”,并输入你的个人访问令牌作为“密码”。

    • 若要使用 Microsoft Entra ID 凭据,请选择“Microsoft Entra ID”。

      对于 Tableau Desktop 2021.1 及更高版本:

      配置身份验证

      • 如果使用 Microsoft Entra ID B2B 来宾帐户,请与管理员联系以获取专用 Microsoft Entra ID 仓库

      注意

      如果你不是管理员,系统将会显示“需要管理员批准”错误。 请求云应用程序管理员或应用程序管理员授予连接到 Tableau 的权限,然后尝试重新登录。

      如果 Microsoft Entra ID 帐户启用了管理员同意工作流,Tableau 桌面会提示你请求 Tableau 的访问权限。 在云应用管理员或应用程序管理员批准请求后,尝试重新登录。

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

将 Tableau Cloud 连接到 Azure Databricks

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

  • 启动一个新工作簿
  • 在菜单栏上,单击“数据”>“新数据源”。
  • 在“连接到数据”页面上,单击“连接器”>“Databricks”。
  • 在 Azure Databricks 页上,输入“服务器主机名”和“HTTP 路径”值。
  • 选择身份验证方法并输入所需信息(如果有)。
  • 单击“登录”。

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/连接器覆盖在将数据处理成适用于 VizQL 的 SQL 时花费了太长时间。 出现这种情况时,应分析返回的内容,并尝试更改分析模式,使每个组、段或项目都有一个仪表板,而不是尝试将所有内容都塞到一个仪表板中并依赖于快速筛选器。

如果是排序或视觉对象布局导致性能不佳,则问题可能出在仪表板尝试返回的标记数。 Azure Databricks 可以快速返回 1 百万条记录,但 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. 查找 .tds 文件中的属性行 odbc-connect-string-extras='' 并设置参数。 例如,若要启用 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 仪表板的性能。

将 Tableau 仪表板连接到 Azure Databricks 后,为许多不同用户、功能或区段提供服务的各个仪表板上的快速筛选器可能成为问题的常见来源。 可以将快速筛选器附加到仪表板上的所有图表。 如果一个仪表板有五个图表和一个快速筛选器,则会导致至少 10 个查询发送到 Azure Databricks。 添加更多筛选器后,此数字可能会上升,导致性能问题,因为 Spark 不适合处理多个同一时刻开始的并发查询。 如果使用的 Azure Databricks 群集或 SQL 仓库不够大,无法处理大量查询,则问题会更严重。

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

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

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

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

使用操作来优化仪表板

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

有关详细信息,请参阅操作提高仪表板性能的 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 约束

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

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

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

将 Azure Databricks 连接到 Tableau

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

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

其他资源