【问题标题】:Vertica-Tableau error Multiple commands cannot be activeVertica-Tableau 错误 多个命令不能处于活动状态
【发布时间】:2016-02-29 19:58:52
【问题描述】:

我们在 Vertica 中有数据集,Tableau 正在从 vertica 为仪表板查询数据(40 亿条记录),如下所示:

所有列表和图表都是 tableau 中的单独工作表,并使用与 Vertica DB 的相同连接。每个列表都是 DB 中的一列,列表是数据集各自列中项目的 # 个计数的降序。图表也与列表相同,但计算方式略有不同。开始日期和结束日期是要查询的数据的日期范围,例如数据连接过滤器,它将查询限制为过去一周、上个月等固定数量的数据。

但我得到了这个错误:

Vertica][VerticaDSII] (10) 查询准备期间出错:多个命令不能在同一连接上处于活动状态。考虑增加 ResultBufferSize 或在启动另一个命令之前获取所有结果。

是否有任何解决此问题的方法或任何更好的方法来解决此问题

【问题讨论】:

  • 想一想:如果我没记错的话,tableau 使用的是 ODBC,并且 ODBC 配置中有一个 Threading 参数(至少在 Linux 下)。如果存在,是否可以帮助设置它?
  • 我不确定,我的理解是如果数据连接未列在 tableau 本地连接中,那么我们可以使用 ODBC 连接 SQL 数据存储。如果我弄错了,请纠正我。但是,让我也尝试一下,正如她提到的那样 [link] (kb.tableausoftware.com/articles/knowledgebase/…)
  • 这方面有什么帮助吗?

标签: tableau-api vertica


【解决方案1】:

您需要一个指定特定 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。

【讨论】:

    【解决方案2】:

    重新启动 taableau 解决了我的问题,它给出了同样的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2023-03-26
      相关资源
      最近更新 更多