Tableau api Vertica Tableau错误多个命令不能处于活动状态

Tableau api Vertica Tableau错误多个命令不能处于活动状态,tableau-api,vertica,Tableau Api,Vertica,我们在Vertica中有数据集,Tableau正在为仪表板查询Vertica的数据(40亿条记录),如下所示: 所有列表和图形在tableau中都是单独的工作表,并使用与Vertica DB相同的连接。每个列表都是DB中的一列,列表是数据集相应列中项目数的降序。图表也与列表相同,但计算方式略有不同。开始日期和结束日期是要查询的数据的日期范围,如数据连接筛选器,它将查询限制为固定数量的数据,例如上周、上月等 但我得到了这个错误: Vertica][VerticaDSII](10)查询准备过程中出

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

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

但我得到了这个错误:

Vertica][VerticaDSII](10)查询准备过程中出错:同一连接上不能激活多个命令。在开始另一个命令之前,应考虑增加结果缓冲区大小或获取所有结果。


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

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

您需要一个指定特定ODBC连接字符串选项的TDC文件来解决此问题

Vertica的指导是添加一个值为“ResultBufferSize=0”的ODBC连接字符串参数“。这显然会强制结果缓冲区不受限制,从而防止出现错误。这在手动构建连接字符串或使用DSN时非常简单,但Vertica是Tableau的本机连接器之一。那么,如何让本机连接器对其连接执行其他操作呢

Tableau中的本机连接可以使用TDC文件进行自定义

“本机连接器”仍然通过供应商的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>

使用“通用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连接字符串附加”的标记。这将如下所示

<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”值将关闭该功能;其他时候,您希望将该值设置为“no”以关闭该功能。有些我们试过的其他的都是

<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不要使用临时表

查看这些定制结果的最佳方法是更改TDC文件并在对更改感到满意后重新启动Tableau Desktop,然后将TDC文件移动到Tableau服务器并重新启动它

将TDC文件放在何处

根据“文件”

对于Windows上的Tableau桌面:文档\我的Tableau存储库\数据源 对于Tableau服务器:程序文件\Tableau\Tableau服务器\\bin 注意:文件必须使用.tdc扩展名保存,但名称无关紧要。”


如果您正在运行Tableau服务器群集,则必须将.tdc文件放置在bin文件夹中的每个工作节点上,以便vizqlserver进程可以找到它。我还强调了最大的问题-您应该使用真正的文本编辑器(如Notepad++或SublimiteText)而不是Notepad来编辑这些文件,因为Notepad喜欢保存内容有一个隐藏的.TXT结尾,只有当结尾真的是.TDC而不是.TDC.TXT时才会识别TDC文件。

只是一个想法:如果我没有弄错的话,tableau使用ODBC,ODBC配置中有一个线程参数(至少在Linux下)。如果存在,是否可以帮助设置?我不确定,我的理解是,如果数据连接未在tableau native connections中列出,那么我们可以使用ODBC连接SQL数据存储。如果我弄错了,请纠正我。但是,让我也按照她提到的[link]()尝试一下。请提供任何帮助?