sql - BigQuery 分区表:指定月份的最短方法是什么?
问题描述
想知道查询分区表时指定月份的最短方法是什么。
TIMESTAMP_TRUNC
to the month 看起来很诱人,但似乎不能用作分区过滤器:
SELECT SUM(views) views
FROM `fh-bigquery.wikipedia_v2.pageviews_2018`
WHERE TIMESTAMP_TRUNC(datehour, month) = '2018-04-01'
Cannot query over table 'fh-bigquery.wikipedia_v2.pageviews_2018' without a filter that can be used for partition elimination
BETWEEN
日期看起来也很诱人,但需要知道每个月有多少天:
SELECT SUM(views) views
FROM `fh-bigquery.wikipedia_v2.pageviews_2018`
WHERE DATE(datehour) BETWEEN '2018-04-01' AND '2018-04-31'
Could not cast literal "2018-04-31" to type DATE at [3:47]
DATE_SUB(DATE_ADD(month), day
有效,但需要输入两次日期并且输入时间很长:
SELECT SUM(views) views
FROM `fh-bigquery.wikipedia_v2.pageviews_2018`
WHERE DATE(datehour)
BETWEEN '2018-04-01'
AND DATE_SUB(DATE_ADD('2018-04-01', INTERVAL 1 MONTH), INTERVAL 1 DAY)
15746003449
您将如何改进这一点?
解决方案
我会这样做:
SELECT SUM(views) as views
FROM `fh-bigquery.wikipedia_v2.pageviews_2018`
WHERE hour >= date '2018-04-01' AND hour < date '2018-05-01';
您可以将日期常量放在 CTE 中:
with params as (
select date '2018-04-01' as dte
)
select sum(views) as views
from params cross join
`fh-bigquery.wikipedia_v2.pageviews_2018`
where hour >= params.dte AND hour < date_add(params.dte, interval 1 month)
推荐阅读
- c# - C# MongoDbDriver 迁移过时的计数到替换方法
- netsuite - 如何在那里导入装配构建和插入线的库存详细信息?
- c++ - 将基类的引用分配给派生
- python - opencv和旧游戏图形python 3
- python - 如何加载 .pth 文件?
- xamarin.forms - MasterDetailPage 侧栏上不可见的按钮
- api - 如何配置 gunicorn 和 nginx 以提供具有可变域结尾的烧瓶应用程序(用于 API)
- go - 无法安装 godef
- node.js - 关系“未定义。{table_name}”不存在 - 使用 Mocha 和 Chai 对 NodeJS 无服务器应用程序进行单元测试
- substrate - 'type Version = Version' 在 Substrate 中不起作用