首页 > 解决方案 > 日历周的 BigQuery 分区

问题描述

每周,我都会收到一个需要插入 BigQuery 的新数据集。数据可以在一周中的任何一天到达。摄取数据后,我想查询上周到达的数据。

一种选择是在数据到达时使用日期作为分区,但是开发人员需要知道数据到达的确切日期才能查询分区。

取而代之的是,在摄取时,我想创建一个表示一年中日历周的 INTEGER 列。格式为 202005 或 202153,其中前者代表 2020 年的第五周,后者代表 2021 年的倒数第二周。

由于这是一个整数,分区的唯一选择似乎是范围分区。为此,BigQuery 要求提供开始、结束和间隔。我应该定义什么价值观?

我可以定义以下内容,但您可以想象这听起来是错误的

start 202001
end 203054
inerval 1

更新:似乎 bigquery 只会创建它有数据的分区。我通过执行检查了

#legacySQL
SELECT 
project_id, dataset_id, table_id, partition_id, TIMESTAMP(creation_time/1000) AS creation_time
FROM [PROJECT_ID:DATASET_ID.TABLE_ID$__PARTITIONS_SUMMARY__]

标签: google-bigquery

解决方案


另一种选择是仍然按日期分区-但不是摄取日期或您想到的任何日期,而是在DATE_TRUNC函数的帮助下开始相应周的日期

DATE_TRUNC(your_date, WEEK)

注意:您甚至可以定义一周的开始日期

WEEK():将 date_expression 截断到前一周边界,其中周从 WEEKDAY 开始。WEEKDAY 的有效值为 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY。


推荐阅读