示例:自定义 ODBC 连接

针对支持 SQL 的数据库使用连接器时,Tableau 将生成针对该数据库调整的 SQL 语句。由于 Tableau 没有 ODBC 数据源使用的 SQL 方言的表示形式,因此它必须通过各种测试和来推导受支持的语法。如果驱动程序报告有关它支持的 SQL 方言的错误或不完整信息,您可以使用 Tableau 自定义项来微调此连接信息,以便改进功能和性能。

在本文中,您将进行 ODBC 连接,检查生成的 Tableau 数据源 (TDS) 文件,并使用它的一部分来创建 Tableau 数据源自定义 (TDC) 文件,该文件随后可用于自定义 ODBC 连接。在开始之前,您应熟悉 Tableau 和 ODBC 中的内容。

注意:Tableau 将提供合理的客户支持级别来帮助排除使用 ODBC 驱动程序进行连接的故障,但无法创建或自定义连接器来处理特定的 ODBC 驱动程序。

建立 ODBC 连接

此部分使用一个示例演示如何创建 ODBC 连接。在示例中,您使用 SQLite ODBC 驱动程序连接到一个 SQLite 数据库。

先决条件

本文中的 ODBC 连接基于 SQLite (http://www.sqlite.org/),它是一种开源数据库。

您需要下载以下两项:

免责声明:此信息会引用第三方产品。本示例并不认可此产品优于任何其他竞争产品。

创建连接

若要创建 ODBC 连接,请使用 SQLite3 ODBC 驱动程序连接到 Northwind 数据库,然后将连接另存为 Tableau 数据源 (TDS) 文件。

  1. 打开 Tableau Desktop。

  2. 在开始页面上的“连接”下,单击“其他数据库(ODBC)”

    注意:对于已经有 Tableau 支持的连接器的(链接在新窗口中打开)数据库,可以单击该连接器的名称来创建连接。

  3. “连接使用”下,选择“驱动程序”,然后从下拉列表中选择“SQLite3 ODBC 驱动程序”

  4. 单击“连接”

  5. “数据库名称”文本框旁边,单击“浏览”,导航到 Northwind.sl3 文件的位置,然后单击“打开”

  6. 单击“确定”关闭对话框,然后单击“登录”

  7. 在数据源页面上的“表”文本框中,键入 Orders

  8. “Orders”表拖到画布上,然后单击工作表标签。

    用于针对特定用途标识此记录的Tableau 确定 ODBC 数据源的限制”对话框将打开。您可以查看详细信息,或者关闭对话框并继续。有关详细信息,请参见 Tableau 如何确定 ODBC 驱动程序的功能

  9. 选择“数据”>“Orders [Northwind.sl3 的路径]”>“添加到已保存的数据源”

  10. 单击“保存”

  11. 关闭工作簿。系统要求您保存更改时,单击“否”

现在,您可以打开 TDS 文件以检查 SQLite 连接。

检查 TDS 文件的 XML 结构

在文本编辑器中打开保存的 Tableau 数据源 (TDS) 文件以查看其 XML 结构。默认情况下,您在上面上创建的文件命名为 Northwind.sl3.tds,位于以下路径中:

Users\[your name]\Documents\My Tableau Repository\Datasources

Users\[your name]\Documents\My Tableau Repository (Beta)\Datasources

这是一个 XML 文档,描述与 Northwind Orders 表的 SQLite 连接。在 <connection> 部分,查找 <connection-customization> 元素,其中包含您可编辑的 <customization> 元素。

供应商和驱动程序名称

连接自定义部分以 Tableau 检测到的 ODBC 驱动程序和数据库供应商的名称开头。Tableau 使用此信息将特定连接自定义与一种类型的 ODBC 数据源相关联。该部分如下所示:

<connection-customization class='genericodbc' enabled='false' version='10.1'>
<vendor name='SQLite' />
<driver name='SQLite3 ODBC Driver' />
<customizations>

自定义类型

Tableau 允许两种类型的自定义项:Tableau 特定功能以及对 SQLGetInfo 的 ODBC API 调用。这些自定义项由名称/值对组成,Tableau 功能的名称在 CAP_ 约定之后,SQLGetInfo API 调用的名称在 SQL_ 约定之后。

已保存的数据源文件包含这两种类型的自定义项的示例。这些自定义项表示 Tableau 能够在连接时通过查询驱动程序检测到的值。该自定义项列表可能不完整或不准确。连接到 ODBC 数据源时,您可以使用自定义项来修改和调整 Tableau 的行为。

以下文章包含自定义项的完整参考。您应已了解了需要如何调整 ODBC 连接以便在环境中按预期方式工作。查看列表以了解可用于调整 ODBC 连接的自定义项。

自定义值的格式

  • 对于每个名称/值对,自定义值全部表示为字符串。

  • Tableau 功能全部是由“yes”或“no”表示的布尔值。

  • SQLGetInfo 值可能是长整型、短整型或字符串数据,具体取决于给定标识符的 SQLGetInfo 的预期返回值。

  • 许多整型字段是表示功能集合的位掩码。

使用 TDC 文件将自定义项设为全局

为了确保自定义项更改应用于给定 ODBC 数据源的所有连接,您需要创建一个 Tableau 数据源自定义 (TDC) 文件。此文件仅包含 <connection-customization> 部分,并且将应用于与 TDC 文件(如供应商和驱动程序名称中所述)中描述的数据库供应商名称和驱动程序名称匹配的任何新 Tableau 连接。任何已具有启用的自定义项部分的现有工作簿或数据源文件将仅使用该部分(而不是 TDC 文件)提供的自定义项。

重要信息:TDC 文件可用于定制连接的功能或诊断和解决与连接数据相关的问题。Tableau 无法彻底测试您可能对这些文件进行的所有潜在修改。创建和使用 TDC 文件需要手动编辑,并且在将其部署到生产环境之前对其进行彻底测试至关重要。

创建 TDC 文件

创建 TDC 文件时,您需要将其保存到正确的位置,以便可供连接使用。如果创建想要发布到 Tableau Server 的工作簿,则您还需要将 TDC 文件保存到服务器。有关详细信息,请参见 Tableau 知识库中的将 TDC 文件与 Tableau Server 配合使用(链接在新窗口中打开)

TDC 文件的结构

每个 TDC 文件都采用以下基本结构:

<connection-customization class=DSCLASS enabled='true' version='10.0'>
    <vendor name=VENDOR />
    <driver name=DRIVER />
    <customizations>
        <customization name='CAP_FAST_METADATA' value='yes'/>
        <customization name='CAP_SOMETHING_ELSE' value='yes'/>
        ...
    </customizations>
</connection-customization>

TDC 文件有三个主要部分:

  • 连接自定义变量
  • 供应商和驱动程序名称
  • 自定义项本身

connection-customization 部分包括以下内容:

  • class:想要连接并自定义的数据源。
  • enabled:指定是否应用了 TDC 文件连接自定义项。在 TDC 文件中,始终设置为“true”。
  • version:Tableau 忽略版本号。

下一部分至关重要,因为它标识此 TDC 文件的数据源的数据库提供程序的供应商名称和驱动程序名称。每个 TDC 文件只能绑定到一个数据源类型。对于我们的本机数据源,这些名称必须同时匹配数据源类名称;例如,对于我们的 Teradata 连接为“teradata”。对于 ODBC 数据源,TDC 文件的供应商名称和驱动程序名称必须与数据库和驱动程序向 Tableau 报告的内容匹配;例如,分别为“SQLite”和“SQLite3 ODBC Driver”。

最后一部分列出了实际的连接自定义项。

这里有两个示例 TDC 文件:第一个是通用 ODBC 连接;第二个是经过修改的本机 Salesforce 连接。请注意,这些仅用于示例目的,列出的自定义项并非为实现特定目标而选择。

<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='genericodbc' enabled='true' version='8.10'>
<vendor name='Gen_ODBC_Vendor'/>
<driver name='Gen_Driver'/>
<customizations>
<customization name='CAP_FAST_METADATA' value='yes' />
<customization name='CAP_ODBC_BIND_FORCE_MAX_STRING_BUFFERS' value='yes' />
<customization name='CAP_ODBC_BIND_PRESERVE_BOM' value='yes' />
</customizations>
</connection-customization>
<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='salesforce' enabled='true' version='8.10'>
  <vendor name='salesforce'/> 
  <driver name='salesforce'/>
  <customizations>
    <customization name='CAP_ODBC_EXPORT_CONTINUE_ON_ERROR' value='yes' />
    <customization name='CAP_ODBC_EXPORT_FORCE_SINGLE_ROW_BINDING' value='yes' />
    <customization name='CAP_ODBC_EXPORT_SUPPRESS_STRING_WIDTH_VALIDATION' value='no' />
  </customizations>
</connection-customization>

将 TDC 文件与 Tableau Desktop 配合使用

  1. 使用文本编辑器,复制和粘贴您的已保存数据源文件的整个 <connection-customization> 部分。有关参考,请参见示例 SQLite TDC 文件

  2. 将文件命名为 odbc-sqlite.tdc,并将其保存到 Documents\My Tableau Repository\Datasources

    注意:该文件必须使用 .tdc 扩展名保存,但名称无关紧要。

  3. 重新启动 Tableau Desktop 以应用更改。

  4. 按照创建连接中所述的方式创建一个 SQLite 新连接。

  5. 转到并打开 Tableau Desktop 日志文件,并查找与下面的示例类似的记录,以验证此自定义文件是否已应用于您的新连接。

日志文件位置记录示例
默认情况下为 C:\Users\<用户>\Documents\我的 Tableau 存储库\LogsFound matching TDC 'C:\\Users\\<name>\\Documents\\My Tableau Repository\\Datasources\\odbc-sqlite.tdc' for class='genericodbc', vendor='SQLite', and driver='SQLite3 ODBC Driver'

将 TDC 文件与 Tableau Prep Builder 配合使用

  1. 使用文本编辑器,复制和粘贴您的已保存数据源文件的整个 <connection-customization> 部分。有关参考,请参见示例 SQLite TDC 文件

  2. 将文件命名为 odbc-sqlite.tdc,并将其保存到以下位置:

    • 对于 Windows:

      Documents\My Tableau Prep Repository\Datasource

    • 对于 Mac:

      Documents/My Tableau Prep Repository/Datasources

    注意:该文件必须使用 .tdc 扩展名保存,但名称无关紧要。

  3. 重新启动 Prep 以应用更改。

  4. 转到并打开日志文件,并查找与下面的示例类似的记录,以验证此自定义文件是否已应用于您的新连接。

日志文件位置记录示例
默认情况下为 C:\Users\<用户>\Documents\我的 Tableau Prep 存储库\LogsFound matching TDC 'C:\\Users\\<name>\\Documents\\My Tableau Prep Repository\\Datasources\\odbc-sqlite.tdc' for class='genericodbc', vendor='SQLite', and driver='SQLite3 ODBC Driver'

将 TDC 文件与 Tableau Server 配合使用

  1. 使用文本编辑器,复制和粘贴您的已保存数据源文件的整个 <connection-customization> 部分。有关参考,请参见示例 SQLite TDC 文件

  2. 将文件命名为 odbc-sqlite.tdc,并将其保存到以下位置:

    • 对于 Windows:

      在 2018.2 之前的 Tableau Server 版本中:

      Program Files\Tableau\Tableau Server\<version>\bin

      从 Tableau Server 版本 2018.2 开始:

      Program Files\Tableau\Tableau Server\packages\bin.<build number>

      或者,对于所有 Tableau Server 版本:

      ProgramData\Tableau\Tableau Server\data\tabsvc\vizqlserver\Datasources

      若要保存文件,您必须是服务器计算机上的 Windows 管理员。

    • 对于 Linux:

      /var/opt/tableau/tableau_server/data/tabsvc/vizqlserver/Datasources/

    注意:该文件必须使用 .tdc 扩展名保存,但名称无关紧要。必须在所有服务器节点上都保存 TDC 文件以保持行为一致。

  3. 对于 Tableau Prep Conductor(运行流程)或 Prep Web 制作(在 Web 上编辑流程),TDC 文件必须放置在其他目录中。

    Prep Conductor

    • 对于 Windows:

      <data directory>\tabsvc\flowprocessor\Datasources

    • 对于 Linux:

      <data directory>/tabsvc/flowprocessor/Datasources

    Prep Web 制作

    • 对于 Windows:

      <data directory>\tabsvc\flowminerva\Datasources

    • 对于 Linux:

      <data directory>/tabsvc/flowmineva/Datasources

  4. 重新启动 Tableau Server 以应用更改。

  5. 转到并打开 Tableau Server 日志文件,并查找与下面的示例类似的记录,以验证此自定义文件是否已应用于您的新连接。

日志文件位置记录示例

<安装路径>\Tableau Server\data\tabsvc\log\vizqlserver

<安装路径>\Tableau Server\data\tabsvc\log\backgrounder

<安装路径>\Tableau Server\data\tabsvc\log\dataserver

<安装路径>\Tableau Server\data\tabsvc\log\vizportal

Found matching TDC 'C:\\ProgramData\\Tableau\\Tableau Server\\data\\tabsvc\\vizqlserver\\Datasources\\odbc-sqlite.tdc for class='genericodbc', vendor='SQLite', and driver='SQLite3 ODBC Driver'

示例 SQLite TDC 文件

<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='genericodbc' enabled='true' version='7.8'>
<vendor name='SQLite' />
<driver name='SQLite3 ODBC Driver' />
	<customizations>
		<customization name='CAP_CREATE_TEMP_TABLES' value='yes' />
		<customization name='CAP_QUERY_BOOLEXPR_TO_INTEXPR' value='yes' />
		<customization name='CAP_QUERY_GROUP_BY_ALIAS' value='no' />
		<customization name='CAP_QUERY_GROUP_BY_DEGREE' value='yes' />
		<customization name='CAP_QUERY_JOIN_ACROSS_SCHEMAS' value='no' />
		<customization name='CAP_QUERY_JOIN_REQUIRES_SCOPE' value='no' />
		<customization name='CAP_QUERY_SUBQUERIES' value='yes' />
		<customization name='CAP_QUERY_SUBQUERIES_WITH_TOP' value='yes' />
		<customization name='CAP_SELECT_INTO' value='no' />
		<customization name='CAP_SELECT_TOP_INTO' value='yes' />
		<customization name='SQL_AGGREGATE_FUNCTIONS' value='127' />
		<customization name='SQL_SQL_CONFORMANCE' value='4' />
	</customizations>
</connection-customization>

自定义 ODBC 连接

假设您已建立了 ODBC 数据源连接,并确定了您可以获取所需的元数据和数据。现在,您需要确定,如果创建数据提取,或者按原样使用实时连接,您是否能获得所需的功能。如果能,则您创建的 TDC 文件已经足够,并且无需自定义连接。

如果 TDC 文件达不到您的要求,则可以对连接进行自定义。您应已了解了需要如何调整 ODBC 连接以便在环境中按预期方式工作。查看列表以了解可用于调整 ODBC 连接的自定义项。

用于改进功能的常见自定义项

以下自定义项可帮助改进默认功能不是最佳的数据源的功能。

  • CAP_SUPPRESS_DISCOVERY_QUERIES - 将此值设置为 true 将阻止 Tableau 在连接开始时执行任何 SQL 查询来确定驱动程序的功能。您需要考虑应明确启用哪些其他功能,因为 Tableau 将无法自动确定这些。

  • SQL_SQL_CONFORMANCE - 此设置指明数据源完全支持哪种级别的 SQL 标准。在至少符合入门级标准时,Tableau 性能最好,因此,此值应至少为 1(如果数据源支持)。

  • SQL_AGGREGATE_FUNCTIONS – 此设置指明哪些聚合函数受支持,例如 MINMAXSUM。值 '127' 指明支持所有标准 SQL 聚合函数。

处理受到严格限制的数据源

一些数据源严重受到限制,以致于 Tableau 无法完成创建连接的步骤。有时这是由于驱动程序中发生崩溃,从而导致 Tableau 停止工作。您可以使用全局 TDC 文件来阻止 Tableau 发出查询或检查可能导致不稳定的功能。

若要创建此文件,您需要知道数据库供应商名称和 ODBC 驱动程序名称。

  1. 在 Tableau 中创建一个新连接,打开日志文件,然后查找类似于如下的一行:
    GenericODBCProtocol::Connect: Detected vendor: 'SQLite' and driver: 'SQLite3 ODBC Driver'
  2. 使用列出的 vendor 名称和 driver 名称创建 TDC 文件。有关示例,请参见供应商和驱动程序名称

  3. 使用 CAP_SUPPRESS_DISCOVERY_QUERIES 之类的自定义项来约束 Tableau 与受限制数据源的交互。

配置 ODBC 驱动程序设置

ODBC 驱动程序提供了对话框来提供连接详细信息,例如服务器、用户名和密码。许多驱动程序还提供了用于控制连接行为的高级选项。在探索改进您的 ODBC 连接的功能或性能的方式时,应考虑这些选项。特别是,查找控制下列各项的设置,因为这些项是导致 Tableau 中的 ODBC 连接过去出现问题的原因:

  • 事务隔离 - 首选 READCOMMITTEDSERIALIZABLE 以确保查询结果中不包括待定事务的数据。

  • 游标 - 首选 Holdable 或 Scrollable 而非 Streaming 游标。由于 Tableau 会在每个只读分析查询后关闭事务,因此流式传输游标可能会被截断,从而导致 Tableau 中显示的结果不完整。

  • 行/结果集缓冲区 - 首选较大的缓冲区大小以改进获取许多行时的性能,这可大大提高创建数据提取的速度。这有时称为高速缓存大小或响应大小。

  • 字符集 - 按首选项的降序排列:UTF-16、UTF-8、ASCII。

高级 SQLite 自定义项

Tableau 具有内置到产品中的 SQLite 特殊自定义项。这些自定义项优先于工作簿文件、数据源文件或全局 TDS 文件中的任何 SQLite 连接自定义项。为了对 SQLite 连接自定义项进行高级更改,您需要让 Tableau 忽略它自己的 SQLite 方言。可通过将报告的数据库供应商名称 (<customization name='SQL_DBMS_NAME' value='SQLite' />) 更改为其他值(例如 SQLite-Tableau)来实现此目的。

ODBC 文档参考

Microsoft 的 MSDN 具有有关 ODBC 标准的文档。ODBC 附录(链接在新窗口中打开)是最适合于文章信息的资源,具体来说:

另请参见

其他数据库 (ODBC) – 描述如何使用 ODBC 连接器连接到数据。

Tableau 和 ODBC – 提供有关 ODBC 的背景信息,描述 Tableau 如何确定 ODBC 驱动程序的功能,并列出常见问题。

Tableau 功能自定义项参考 - 列出可用于定义数据源支持的 Tableau 功能的自定义项。

ODBC/SQL 自定义项参考 - 列出自定义项,这些自定义项表示 ODBC 驱动程序报告支持的部分 ODBC 和 SQL 标准。

为原生连接器自定义连接字符串(链接在新窗口中打开) – Tableau 社区中的本文介绍如何使用 odbc-connect-string-extras 自定义项来修改使用原生连接器进行的连接。

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