google-bigquery - 日历周的 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__]
解决方案
另一种选择是仍然按日期分区-但不是摄取日期或您想到的任何日期,而是在DATE_TRUNC函数的帮助下开始相应周的日期
DATE_TRUNC(your_date, WEEK)
注意:您甚至可以定义一周的开始日期
WEEK():将 date_expression 截断到前一周边界,其中周从 WEEKDAY 开始。WEEKDAY 的有效值为 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY。
推荐阅读
- javascript - Gulp 没有将 SCSS 转换为 CSS
- python - When is self statement true and when is false?
- python - 如何在 Windows 中使用 python 2.7 将 .raw 文件转换为 .jpg 或 .png
- python - 关闭线程时套接字未关闭
- r - 在 Dygraph R 中调整图表区域
- react-native - Redux 状态更改不会更新循环内的组件
- python - Python 中的 Selenium - 下拉菜单
- vbscript - 根据日期显示图像 VB 脚本
- php - 如何为变量循环 Api
- c++ - 为什么我可以修改 const 引用返回?