BigQuery 中记录类型与展平表的查询性能

Posted

技术标签:

【中文标题】BigQuery 中记录类型与展平表的查询性能【英文标题】:Query performance on record type vs flatten table in BigQuery 【发布时间】:2012-11-02 13:50:44 【问题描述】:

我有一个带有“订单”的表格,以及以 JSON 形式提供的“订单行”,将其作为 JSON 存储在 BigQuery 中很简单。我可以运行一个进程将文件展平为行,但这是一种负担,并且会使 BigQUery 表变大。

BigQuery 的最佳性能结构是什么?假设我对总和或产品以及订单行中的销售有疑问。

记录列中“记录”(或“订单行”)数量的最佳做法是什么?它可以包含数千个还是针对少数几个?假设我会像在基于 MongoDB 文档的数据库中一样查询它。

这将帮助我规划正确的架构。

【问题讨论】:

【参考方案1】:

BigQuery 的列式架构旨在以高性能方式处理嵌套和重复的字段,并且通常可以尽可能快地返回查询结果,就像这些记录被展平时一样。事实上,在某些情况下,(取决于您的数据和您正在运行的查询类型)使用已经嵌套的记录实际上可以让您避免附加额外步骤的子查询。

简短回答:不要担心扁平化,将数据保持在嵌套结构中,无论哪种方式查询性能通常都是一样的。

但是,关于您的第二个问题:您的记录限制将取决于您可以在单个记录中存储多少数据。目前是 BigQuery 的per row maximum is 100MB。一条记录中可以有很多很多重复的字段,但它们需要符合这个限制。

【讨论】:

以上是关于BigQuery 中记录类型与展平表的查询性能的主要内容,如果未能解决你的问题,请参考以下文章

访问 BigQuery RECORD - 在 Tableau 中重复

查询 Bigquery 重复字段

BigQuery:需要在相关子查询中返回记录类型的唯一值

从BigQuery数据查询中查询名为chartio的BI工具时的最大数据大小是多少?

BigQuery 在同一查询中展平 GA 会话和命中级别字段

查看 Google Analytics 时如何 UNNEST 和展平 BigQuery 中的所有记录