谷歌BigQuery的Tableau数据提取刷新需要很长时间



我们对BigQuery<->的组合感到非常满意Tableau服务器,具有实时连接。然而,我们现在希望在Tableau Server上使用数据提取(500MB)(因为这个数据源不太大,而且使用频率很高)。这需要太多的时间来刷新(1.5h+)。我们注意到只有0.1%是查询时间,其余是数据导出。由于Tableau服务器位于同一平台和位置,因此延迟应该不是问题。

这类似于将BigQuery表缓慢导出到单个文件,这可以通过使用"菊花链"选项(通配符)来解决。不幸的是,我们不能在Tableau中对Google BigQuery数据提取刷新使用类似的逻辑。。。

我们已经确定了一些方法,但对我们目前的想法不满意:

  1. 使用增量刷新:我们现有的BigQuery表行可以更改:只有进行完全刷新,这些更改才能应用于Tableau
  2. 使用菊花链选项将BigQuery表导出到GCS,并使用Tableau SDK提取Tableau数据:这将导致相当大的开销
  3. 使用Tableau Server的自定义接收器编写数据流作业(数据提取)
  4. 使用直接与BigQuery API通信的Tableau web连接器进行实验:我认为这不会更快吗?我没有看到任何关于使用Tableau web连接器并行调用的内容,但我还没有尝试这种方法

我们更喜欢非技术性的选择,以限制维护。。。有没有办法修改Tableau连接器以使用BigQuery的"菊花链"选项?

您已经在BigQuery中上传了数据。难道你不能只使用加载作业的输入(可能是CSV)作为Tableau的输入吗?

当我们使用Tableau和BigQuery时,我们也会注意到提取速度很慢,但我们通常不会这样做,因为您失去了BigQuery的功能。我们首先从实时数据连接开始,然后(如果需要)将其转换为自定义查询,该查询将数据聚合到更小的数据集中,只需几秒钟即可提取。

使用BigQuery和Tableau实现更高性能的另一种方法是预先聚合或连接上的表。大型表上的JOIN可能很慢,所以如果您使用了很多这样的表,您可能会考虑生成一个先执行所有JOIN的非规范化数据集。您将得到一个包含大量重复项和大量列的数据集。但是,如果您只在Tableau中选择需要的内容(隐藏未使用的字段!),那么这些列将不计入查询成本。

我看到的一个建议与您的第2点类似,您将BQ表导出到Google Cloud Storage,然后使用Tableau Extract API从GCS中的平面文件创建.tde。

这是谷歌云网站上的一篇文章,所以我认为这将是最佳实践:

https://cloud.google.com/blog/products/gcp/the-switch-to-self-service-marketing-analytics-at-zulily-best-practices-for-using-tableau-with-bigquery

这里有一篇文章提供了实现上述目标的分步指南。

https://community.tableau.com/docs/DOC-23161

如果Tableau使用BigQuery Storage API优化BQ连接器以进行提取刷新,那就太好了。我们的Tableau Server环境也与BQ数据集位于同一GCP区域,刷新时间较慢。

最新更新