google-bigquery - 如何将时间分区表与模板表一起使用并超过 BigQuery 的 4000 个限制?

标签 google-bigquery

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

To create smaller sets of data by date, use time-partitioned tables. To create smaller tables that are not date-based, use template tables and BigQuery creates the tables for you.

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

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

最佳答案

你应该看看Clustered Tables在分区表上。

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

聚簇表简介

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

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

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

集群表定价

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

关于google-bigquery - 如何将时间分区表与模板表一起使用并超过 BigQuery 的 4000 个限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489600/

相关文章:

google-cloud-platform - 如果用户查询公共(public) BigQuery 数据库,数据所有者可以看到已执行的查询

google-bigquery - 从 MySQL 转移到 BigQuery 而不超出限制?

google-cloud-platform - 带有 'Order Each by' 子句的 Google BigQuery 大表(105M 记录)产生 "Resources Exceeds Query Execution"错误

javascript - 谷歌云函数bigquery json插入TypeError : job. promise 不是函数

google-bigquery - 将数据附加到通过 BigQuery 中的 Avro 文件创建的表

google-bigquery - 将数据加载到 BigQuery 时,当 csv 文件中有换行符时,会提示缺少关闭双引号 (") character'

python - 将 JSON 上传到 Bigquery 非特定错误

google-bigquery - BigQuery - 列出日期分区表的分区?

python - Beam/Google Cloud 数据流 ReadFromPubsub 缺失数据

python - BigQuery 插入作业而不是流式处理