Vertica-Tableau错误多个命令无法处于活动状态

时间:2014-07-03 15:47:00

标签: tableau vertica

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

Tableau Dashboard

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

但是我得到了这个错误:

  

Vertica] [VerticaDSII](10)查询准备期间发生错误:在同一连接上无法激活多个命令。在启动另一个命令之前,请考虑增加ResultBufferSize或获取所有结果。

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

2 个答案:

答案 0 :(得分:1)

你需要一个TDC文件,它指定一个特定的ODBC连接字符串选项来解决这个问题。

Vertica的指导是添加一个ODBC Connect String参数,其值为“ResultBufferSize = 0”。这显然会强制结果缓冲区无限制,从而防止出错。这很简单,可以在手动构建连接字符串或使用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>

使用“通用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'开头,那么给出'是'值将关闭该功能;其他时候您想将值设置为“否”以关闭该功能。我们尝试的其他一些是

<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这样的真实文本编辑器而不是记事本来编辑它们,因为Notepad喜欢使用隐藏的.TXT结尾来保存东西,而TDC文件只会被识别结局真的是.tdc,而不是.tdc.txt。

答案 1 :(得分:0)

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