首页 > 解决方案 > 使用 CURRENT_DATE() 提取通配符表的子集

问题描述

我有一组表都以相同的字符串类型日期格式结尾,例如

response_logs.tablename_20200827
response_logs.tablename_20200826
response_logs.tablename_20200825

我的查询的结构是使用通配符功能将所有这些表拉到同一行中:

SELECT
column1, column2, column3
FROM
response_logs.tablename_*

这已经工作了很长时间,但是现在数据集变得太大而无法拉出整个集合。我希望能够根据当前日期提取最近几周的数据。我已经成功手动设置表后缀日期:

SELECT
column1, column2, column3
FROM 
response_logs.tablename_*
WHERE _table_suffix>"20200824"

但我希望能够自动执行此过程(查询已安排并在我通常不看的情况下运行)。就像是:

SELECT
column1, column2, column3
FROM
response_logs.tablename_*
WHERE _table_suffix>(CURRENT_DATE()-7)

如何格式化查询的 (CURRENT_DATE()) 部分,以便它只提取最后几周的表?

谢谢!

标签: sqldatetimeselectgoogle-bigquerywhere-clause

解决方案


减去天数以获得您的时间窗口,然后将日期格式设置为与后缀相同的格式。

select _table_suffix as suffix, count(*) as ct
from `project.dataset.table_*`
where _table_suffix >= format_date('%Y%m%d', date_sub(current_date(), interval 7 day))
group by 1

推荐阅读