在做了一些研究后,我发现 TABLE_DATE_RANGE 功能可能适合我的需要,但是表名必须采用<prefix><date> 的格式
我认为你的发现不正确
尝试在下面查询比方说上周的表格(假设表格名称是 YYYMMDD 格式 - 所以没有前缀):
对于 BigQuery 旧版 SQL
#legacySQL
SELECT <list of fields ...>
FROM (TABLE_DATE_RANGE([yourProject:yourDataset.],
DATE_ADD(CURRENT_TIMESTAMP(), -7 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY')
))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
您可以使用 [githubarchive:day] 公共数据集对其进行测试
#legacySQL
SELECT
STRFTIME_UTC_USEC(created_at, "%Y%m%d") AS d,
DAYOFWEEK(created_at) AS dow,
DAYOFWEEK(CURRENT_TIMESTAMP()) AS cdow,
COUNT(1) AS rows
FROM (TABLE_DATE_RANGE([githubarchive:day.],
DATE_ADD(CURRENT_TIMESTAMP(), -7 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY')
))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
对于 BigQuery 标准 SQL
#standardSQL
SELECT
DATE(created_at) AS d,
EXTRACT(DAYOFWEEK FROM DATE(created_at)) AS dow,
EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) AS cdow,
COUNT(1) AS c
FROM `yourProject.yourDataset.*`
WHERE _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -7 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
AND FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -1 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
请注意,在标准 SQL 中,如果您的数据集中有视图,则此类模式可能会出现问题 - 您将收到类似 Error: Views cannot be queried through prefix
的错误
在这种情况下 - 例如,您可以使用下面的“技巧”(假设视图与 (2*) 通配符不匹配
#standardSQL
SELECT
DATE(created_at) AS d,
EXTRACT(DAYOFWEEK FROM DATE(created_at)) AS dow,
EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) AS cdow,
COUNT(1) AS c
FROM `githubarchive.day.2*`
WHERE CONCAT('2', _TABLE_SUFFIX )
BETWEEN FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -7 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
AND FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -1 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3