google-bigquery - 如何在 Google BigQuery 中操作 CURRENT_DATE()?
问题描述
我们在 BigQuery 中有一个计划查询,它根据大视图将数据附加到表中。视图引用其他视图,而这些视图又引用其他视图。在最低级别,视图根据 CURRENT_DATE() 获取数据。是这样的:
视图 1 (view_1):
SELECT Date, COUNT(1) as RecordCount FROM `project_name.dataset_name.first_table` WHERE DATE(_PARTITIONTIME) = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY) GROUP BY Date
视图 2 (view_2):
SELECT Date, COUNT(1) as RecordCount FROM `project_name.dataset_name.second_table` WHERE DATE(_PARTITIONTIME) = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY) GROUP BY Date
视图 3 (view_3):
SELECT a.Date, a.RecordCount, b.RecordCount FROM `project_name.dataset_name.view_1` a LEFT JOIN `project-name.dataset_name.view_2` b ON a.Date = b.Date
我想要的是类似回填的东西;操纵 CURRENT_DATE() 以便我可以为某个历史时期构建此表。我尝试使用“手动运行”对此进行测试,但它始终输出相同的数据。我写的预定查询是这样的:
SELECT COUNT(1) as RecordCount FROM `project_name.dataset_name.table_name` WHERE DATE(_PARTITIONTIME) = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
当我从 01-01-2020 开始手动运行并在 31-01-2020 结束时,目标表中的输出始终是昨天的记录数(这意味着 CURRENT_DATE() 仍然是今天)。
如果我没记错的话,我过去可以使用“回填”来执行此操作,但其中的输出似乎与替换回填的手动运行不同。
预期的输出类似于:
2020-03-02 3294 11201
2020-03-01 2984 10812
2020-02-29 3121 12121
2020-02-28 2912 12239 .....
但是手动运行的输出是:
2020-03-02 3294 11201
2020-03-02 3294 11201
2020-03-02 3294 11201
2020-03-02 3294 11201
......
解决方案
因此,如果您使用调度查询,则使用@run_date
(type date
) 或@run_time
(type timestamp
) 比current_date()
使用未定义或与本地运行时相关的上下文更安全。另一个优点是在使用回填时,@run_time/@run_date 填充了回填请求中定义的模拟日期。请参阅此Google 文档
所以在你的查询中你会像这样改变它
SELECT Date, COUNT(1) as RecordCount FROM `project_name.dataset_name.first_table` WHERE DATE(_PARTITIONTIME) = DATE_ADD(@run_date, INTERVAL -1 DAY) GROUP BY Date
@run_date
是 BigQuery 类型date
,所以它应该可以正常工作DATE_ADD
用户@ebeltran 在对 op 的评论中也提到了这一点
推荐阅读
- python - Zarr:将 xarray 写入性能提高到 S3
- flutter - 颤振类型'RxList
' 不是 'RxList 类型的子类型 >' - sql-server - 如何将带有消息的横幅添加到报表服务器 Web 门户?
- r - 如何更改(循环中的)块内的块选项(结果格式)?
- python - 从python中的SVG文件中提取路径数据到XY点
- python - 如何使用 Selenium 下载文件?
- r - 使用 rvest 将函数映射到抓取的链接列表时遇到问题
- android - 使用毕加索的 ImageView 中未显示大图像
- docker - 适用于 Windows 10 家庭版的 Docker
- reactjs - React ref 不会在异步集上更新