【问题标题】:How to use time partitioned tables with template tables and beyond 4000 limit for BigQuery?如何将时间分区表与模板表一起使用并且 BigQuery 的限制超过 4000?
【发布时间】:2018-12-31 13:02:48
【问题描述】:

对于流式插入,我想使用一个模板表(带有用户 ID 后缀),它本身就是一个分区表。通过这种方式,我可以使我的表比仅使用分区表更小,从而使我的查询更具成本效益。此外,无论我的系统中有多少用户,我的每个用户的查询成本都保持不变。根据https://cloud.google.com/bigquery/streaming-data-into-bigquery:-的文档@

要按日期创建较小的数据集,请使用时间分区表。要创建不基于日期的较小表,请使用模板表,BigQuery 会为您创建表。

听起来好像可以是时间分区表或模板表。不能两者兼而有之吗?如果没有,我应该研究另一种架构吗?

关于我上面提出的架构的另一个问题是我在 https://cloud.google.com/bigquery/docs/partitioned-tables 上看到的 4000 限制。 是否意味着我的分区表不能覆盖超过 4000 天?在这种情况下我是否必须删除旧分区,或者最后一个分区是否会继续存储任何后续流数据?

【问题讨论】:

标签: google-bigquery


【解决方案1】:

您应该查看分区表上的Clustered Tables

这样您就可以拥有一个包含所有用户的表,按时间分区,并按 user_id 集群,就像您在模板表中使用的那样。

聚簇表简介

当您在 BigQuery 中创建聚簇表时,表数据会根据表架构中一列或多列的内容自动组织。您指定的列用于并置相关数据。当您使用多列对表进行聚类时,您指定的列顺序很重要。指定列的顺序决定了数据的排序顺序。

集群可以提高某些类型查询的性能,例如使用过滤子句的查询和聚合数据的查询。当查询作业或加载作业将数据写入聚簇表时,BigQuery 会使用聚簇列中的值对数据进行排序。这些值用于将数据组织到 BigQuery 存储中的多个块中。当您提交包含基于聚类列过滤数据的子句的查询时,BigQuery 会使用已排序的块来消除对不必要数据的扫描。

同样,当您提交基于聚类列中的值聚合数据的查询时,性能会得到提高,因为已排序的块将具有相似值的行放在一起。

聚簇表定价

当您在 BigQuery 中创建和使用聚簇表时,您的费用取决于表中存储的数据量以及您针对数据运行的查询。聚集表通过修剪数据帮助您reduce query costs,使其不被查询处理。

【讨论】:

  • 这很棒,但遗憾的是它还处于 alpha 阶段。我已申请使用此功能,但由于它还没有准备好生产,我现在将使用简单的时间分区表,以后想办法将数据复制到聚簇表。
  • 不要害怕这是 Alpha 版。我已经使用了几个月了,效果很好。
  • 这将在接下来的几天内进行测试。这是我们推荐的方法,我们计划在未来进行一些改进。
猜你喜欢
  • 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
相关资源
最近更新 更多