在BigQuery中嵌套数据有缺点吗?

时间:2017-02-09 21:22:29

标签: google-bigquery

我们有不同维度的数据,例如:

  • 公司名称
  • 按日期,公司
  • 的股票价格
  • 按日期和日期的商品价格商品
  • 按日期,商品和产品的生产量公司

我们正在考虑将这些存储在BigQuery中的最佳方式。一种可能的方法是将它们全部放在同一个表中,并嵌套额外的维度。

这意味着:

  • 几乎所有数据都将嵌套 - 例如每个公司都会有一个“行”,然后它的价格将按日期嵌套。
  • 数据必须至少共享一个维度 - 我认为没有办法在第一列是公司名称的表格中表示商品价格

有缺点吗?是否有性能影响?在每个公司的行中嵌套5000个日期+相关值是否明智?

2 个答案:

答案 0 :(得分:3)

在BigQuery模式中使用嵌套/重复列很常见,因为它可以更轻松地推理数据。例如,Firebase会在多个级别生成重复的模式。如果你压扁所有东西,那么缺点是你需要为每一行提供某种独特的ID以便将事件相互关联,然后你需要聚合(使用ID作为关键)而不是简单的过滤器,如果你想做任何计数。

至于嵌套/重复模式的缺点,一个是您可能会发现自己使用ARRAY子查询或STRUCT运算符执行结构的复杂变换。这些通常很快,但相对于查询而言,它们确实有一些开销,而根本没有对结果施加任何结构。

我最好的建议是加载一些数据并运行一些实验。存储和查询都相对便宜,因此您可以尝试一些不同的架构形状,看看哪种更适合您的用途。

答案 1 :(得分:-4)

在Bigquery中更新是一项新功能,但根据公开信息BigQuery DML,目前仅限每桌每天48次更新。

  

配额

     

DML语句的处理成本远高于SELECT   语句。

     

每个表每天的最大UPDATE / DELETE语句:48最大值   每个项目每天的UPDATE / DELETE语句:500最大INSERT   每个表每天的语句:每天1,000个最大INSERT语句   每个项目:10,000

处理嵌套数据也非常昂贵,因为每列查询都会加载该列的所有数据。如果您对嵌套数据进行大量操作,它也会很慢。