【问题标题】:Business Intelligence Datasource Performance - Large Table商业智能数据源性能 - 大表
【发布时间】:2019-09-04 23:46:22
【问题描述】:

我使用 Tableau 并且有一个包含 140 个字段的表。由于表格的大小/宽度,性能很差。我想删除字段以提高阅读速度,但我的用户群如此之大,每个字段至少有一个人使用,而 90% 使用相同的 ~20 个字段。

这个问题的最佳解决方案是什么? (Tableau 是我们的 BI 工具,BigQuery 是我们的数据库)

到目前为止我做了什么: 在 Tableau 中,不清楚如何使用根据所选字段更改的动态数据源。理想情况下,我希望有更小的视图或非规范化表。当用户在 Tableau 中进行选择时,基础数据源会更新为具有该字段的表或视图。

我尝试了大视图的简单版本,但它的性能比我的大表差,并且读取的数据明显更多(请记住,我是 BigQuery,因此由于成本,我非常关心读取的字节数)

【问题讨论】:

  • 你确定是表格宽度有问题吗?我读了 10 秒钟的 bigquery doco,它没有提到宽度。您是否进行了测试以确认较窄的表格更快? Tableau 不是只选择它需要的字段吗?
  • 感谢@Nick.McDermaid。您完全正确,宽度不一定是问题。但是,在我的情况下,更大的宽度会导致更高的基数。这就是为什么我想尽可能地减少。而且,也是如此 - Tableau 仅显示选定的字段。但是,与上述相同,由于增加了基数的附加字段,该字段可能会长 1.5 倍。欣赏这个想法!继续前进。
  • Tableau 不仅显示可视化项中使用的字段 - 它仅查询有关这些字段的数据源。您可以将 Tableau 数据源视为定义一系列可能的 SQL 查询,并且 Tableau 会根据您在该视图中实际使用的字段生成优化的 SQL 查询。所以拥有很多列并不一定很昂贵。
  • 两个提示 1. 如果您的数据库强制执行引用完整性(例如,不存在的行没有外键),那么如果您从 Data 中选择“Assume Referential Integrity”选项,Tableau 可以生成更高效的 SQL菜单。特别是。对于星型和雪花型模式很有用。 2. 使用 Tableau 性能记录(在帮助菜单下)或 Tableau 日志查看器(开源应用程序)查看生成的实际 SQL。要评估性能,请将其粘贴到 SQL 客户端并进行实验、查看查询计划、检查统计信息等 - 首先确保生成的 SQL 确实是问题所在。
  • 再说一次,我不是 bigquery 专家,但 在我的情况下,更大的宽度会导致更高的基数 对我来说没有意义。基数不是列,而是行。除非你是说数据模型存在某种跨产品设计缺陷?

标签: performance tableau-api business-intelligence query-performance sqlperformance


【解决方案1】:

建议 1: 提取数据。

特别是在涉及按查询字节付费的数据源时,(Big Query、Athena 等)提取非常有意义。取决于用户的数据必须有多“新鲜”。 (当然,所有用户都会说“直播是唯一的出路”,但请深入研究一下,看看它实际上是什么。)刷新可以安排在 15 分钟之内。刷新的真正力量来自“增量刷新”的形式,即只添加新记录(沿着 int 或日期的索引)。这是降低成本的好方法 - 如果您的 BigQuery 数据库是分区的 - (它应该是。)由于 Tableau 数据提取包含在 .hyper 文件中,这是一种 Tableau 自己设计/控制的结构,因此它们速度极快,并且非常适合在 Tableau 中使用。

建议 2: 创建 3 个(或更多)数据源。在验证这些数据源提供正确信息后,对它们进行认证。为用户提供清晰的描述。

  1. 原始大型数据集。
  2. 90% 的约 20 个字段的子集。
  3. 10% 的剩余字段
  4. 1 的摘录
  5. 2 的摘录
  6. 3 的摘录

重要的是,如果每个数据源中的字段名称匹配(即:从未手动更改过),那么用户应该很容易根据需要“扩展”到更大的数据集。这意味着他们通常可以从一小部分数据开始探索,然后使用“replace datasource”功能切换到不同的数据源,同时保持相同的视图。 (不过,如果要按比例缩小,这也行不通。)

【讨论】:

  • 感谢您的想法。建议1绝对是理想的。但是,问题在于在 BigQuery 中的大型基数表上创建数据提取已被证明是不成功的。提取 150 万条记录需要 30 多分钟。我的小表是 3.5 亿条记录。建议 2 是我倾向于的地方,但希望避免维护多个表。但是,我开始认为这可能是最好的方法。
  • BigQuery 本身对同样的 150 万行数据完成一次 SELECT * 需要多长时间?
  • 我想给你加标签,但这样做实在是太费时间了。也许2分钟上衣?我在从 BigQuery 中提取数据时遇到了很多问题。我在 Postgres 等数据库中发现了更好的性能(考虑到 BigQuery 的整体性能,这简直是疯了)。
  • 是的,令人惊讶的是,您会看到 30 分钟的提取时间。 Tableau 和 BigQuery 之间的网络架构如何? (代理、负载均衡器、防火墙等?)您的网络团队可能能够发现/解释速度差异。
  • 谢谢,这是个好主意。我将继续研究,看看是否有更好的方法可以做。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多