您需要一个指定特定 ODBC 连接字符串选项的 TDC 文件来解决此问题。
Vertica 的指导是添加值为“ResultBufferSize=0”的 ODBC 连接字符串参数。这显然会强制结果缓冲区不受限制,从而防止错误。在手动构建连接字符串或使用 DSN 时,这很简单,但 Vertica 是 Tableau 的本机连接器之一。那么如何告诉本机连接器对其连接执行其他操作呢?
可以使用 TDC 文件自定义 Tableau 中的本机连接
“本机连接器”仍然通过供应商的 ODBC 驱动程序连接,并且可以像“其他数据库”/ODBC 连接一样进行自定义。在 TDC 文件本身中,“ODBC”连接被称为“通用 ODBC”,这是考虑差异的更准确的方法。
TDC 自定义的完整指南以及所有选项都可以在此处获得,尽管阅读内容非常密集。没有提供的一件事是自定义“本机连接器”的示例。 TDC文件的基本结构是这样的
<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='genericodbc' enabled='true' version='7.7'>
<vendor name='' />
<driver name='' />
<customizations>
</customizations>
</connection-customization>
使用“Generic ODBC”时,类为“genericodbc”,然后必须指定供应商和驱动程序名称,以便 Tableau 可以知道何时应应用 TDC 文件。对于本机连接器来说,这要简单得多——您只需在所有三个地方都使用本机连接器名称。本机连接器名称的大列表在本文末尾。幸运的是,Vertica 简称为“vertica”。所以我们的 Vertica TDC 框架如下所示:
<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='vertica' enabled='true' version='7.7'>
<vendor name='vertica' />
<driver name='vertica' />
<customizations>
</customizations>
</connection-customization>
这是一个好的开始,但我们需要一些实际的自定义标签才能让任何事情发生。根据文档,要向 ODBC 连接字符串添加其他元素,我们使用名为“odbc-connect-string-extras”的标记。这看起来像
<customization name='odbc-connect-string-extras' value='ResultBufferSize=0;' />
我们发现一个重要的事情是所有的 ODBC 连接附加项都需要在这个单个标记中。因为我们想在 Vertica 集群中开启负载均衡,所以推荐了第二个参数:ConnectionLoadBalance=1。要获得这两个参数,正确的方法是
<customization name='odbc-connect-string-extras' value='ResultBufferSize=0;ConnectionLoadBalance=1;' />
您可以进行一整套其他自定义设置,以了解它们如何影响性能。确保您了解自定义选项的措辞方式——如果它以“SUPRESS”开头,那么给出“yes”值将关闭该功能;其他时候,您想将该值设置为“否”以关闭该功能。我们尝试过的其他一些是
<customization name='CAP_SUPPRESS_DISCOVERY_QUERIES' value='yes' />
<customization name='CAP_ODBC_METADATA_SUPPRESS_PREPARED_QUERY' value='yes' />
<customization name='CAP_ODBC_METADATA_SUPPRESS_SELECT_STAR' value='yes' />
<customization name='CAP_ODBC_METADATA_SUPPRESS_EXECUTED_QUERY' value='yes' />
<customization name='CAP_ODBC_METADATA_SUPRESS_SQLSTATISTICS_API' value='yes' />
<customization name= 'CAP_CREATE_TEMP_TABLES' value='no' />
<customization name= 'CAP_SELECT_INTO' value='no' />
<customization name= 'CAP_SELECT_TOP_INTO' value='no' />
第一组主要是关于减少元数据检测的查询数量,而第二组告诉 Tableau 不要使用 TEMP 表。
查看这些自定义结果的最佳方法是更改 TDC 文件并重新启动 Tableau Desktop 对更改感到满意后,将 TDC 文件移动到您的 Tableau Server 并重新启动它。
TDC 文件的放置位置
根据文档”
对于 Windows 上的 Tableau Desktop:Documents\My Tableau Repository\Datasources
对于 Tableau Server:Program Files\Tableau\Tableau Server\\bin
注意:文件必须使用 .tdc 扩展名保存,但名称无关紧要。”
如果您正在运行 Tableau Server 群集,则必须将 .tdc 文件放在 bin 文件夹中的每个工作程序节点上,以便 vizqlserver 进程可以找到它。我还强调了最大的问题——你应该使用像 Notepad++ 或 SublimeText 这样的真正的文本编辑器而不是记事本来编辑这些,因为记事本喜欢以隐藏的 .TXT 结尾保存内容,并且 TDC 文件只有在以下情况下才会被识别结尾真的是 .tdc,而不是 .tdc.txt。