Google bigquery 按最后日期和使用分区的BigQuery筛选器
我问过如何过滤最后的日期,得到了很好的答案,它们都可以,但是,它们扫描整个表,字段SETTLEMENTDATE是一个分区字段,有没有办法只扫描一个分区 作为一个例子,我使用这个查询Google bigquery 按最后日期和使用分区的BigQuery筛选器,google-bigquery,Google Bigquery,我问过如何过滤最后的日期,得到了很好的答案,它们都可以,但是,它们扫描整个表,字段SETTLEMENTDATE是一个分区字段,有没有办法只扫描一个分区 作为一个例子,我使用这个查询 #standardSQL SELECT * EXCEPT(isLastDate) FROM ( SELECT *, DATE(SETTLEMENTDATE) = MAX(DATE(SETTLEMENTDATE)) OVER() isLastDate FROM `biengine-252003.aemo2.d
#standardSQL
SELECT * EXCEPT(isLastDate)
FROM (
SELECT *, DATE(SETTLEMENTDATE) = MAX(DATE(SETTLEMENTDATE)) OVER() isLastDate
FROM `biengine-252003.aemo2.daily`
)
WHERE isLastDate
编辑:请最后一个日期并不总是当前日期,因为数据中存在延迟假设结算日期是日期数据类型,您可以使用下面的方法获取今天的分区
SELECT *
FROM `biengine-252003.aemo2.daily`
WHERE SETTLEMENTDATE = CURRENT_DATE()
或者,例如昨天的分区
SELECT *
FROM `biengine-252003.aemo2.daily`
WHERE SETTLEMENTDATE = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
更多信息请参见假设结算日期为日期数据类型,您可以使用下面的内容获取今天的分区
SELECT *
FROM `biengine-252003.aemo2.daily`
WHERE SETTLEMENTDATE = CURRENT_DATE()
或者,例如昨天的分区
SELECT *
FROM `biengine-252003.aemo2.daily`
WHERE SETTLEMENTDATE = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
有关更多信息,请参见米哈伊尔的回答类似于对公共数据的处理:
SELECT MAX(views)
FROM `fh-bigquery.wikipedia_v3.pageviews_2019`
WHERE DATE(datehour) = DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
AND wiki='es'
# 122.2 MB processed
但问题似乎是这样的:
SELECT MAX(views)
FROM `fh-bigquery.wikipedia_v3.pageviews_2019`
WHERE DATE(datehour) = (SELECT DATE(MAX(datehour)) FROM `fh-bigquery.wikipedia_v3.pageviews_2019` WHERE wiki='es')
AND wiki='es'
# 50.6 GB processed
。。。但对于小于50.6GB的方式
您现在需要的是某种脚本,分两步执行:
max_date = (SELECT DATE(MAX(datehour)) FROM `fh-bigquery.wikipedia_v3.pageviews_2019` WHERE wiki='es')
;
SELECT MAX(views)
FROM `fh-bigquery.wikipedia_v3.pageviews_2019`
WHERE DATE(datehour) = {{max_date}}
AND wiki='es'
# 115.2 MB processed
您必须在BigQuery之外编写此脚本,或者等待上的新闻。米哈伊尔的回答看起来像是在处理公共数据:
SELECT MAX(views)
FROM `fh-bigquery.wikipedia_v3.pageviews_2019`
WHERE DATE(datehour) = DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
AND wiki='es'
# 122.2 MB processed
但问题似乎是这样的:
SELECT MAX(views)
FROM `fh-bigquery.wikipedia_v3.pageviews_2019`
WHERE DATE(datehour) = (SELECT DATE(MAX(datehour)) FROM `fh-bigquery.wikipedia_v3.pageviews_2019` WHERE wiki='es')
AND wiki='es'
# 50.6 GB processed
。。。但对于小于50.6GB的方式
您现在需要的是某种脚本,分两步执行:
max_date = (SELECT DATE(MAX(datehour)) FROM `fh-bigquery.wikipedia_v3.pageviews_2019` WHERE wiki='es')
;
SELECT MAX(views)
FROM `fh-bigquery.wikipedia_v3.pageviews_2019`
WHERE DATE(datehour) = {{max_date}}
AND wiki='es'
# 115.2 MB processed
您必须在BigQuery外部编写脚本,或者等待消息。现在在BigQuery中,您可以声明一个包含目标日期的变量。下面是一个例子:
设置最大日期默认值从“fh bigquery.wikipedia\u v3.pageviews\u 2019”WHERE wiki='es'中选择DATEMAXdatehour;
选择MaxView
来自“fh bigquery.wikipedia\u v3.pageviews\u 2019”
其中DATEdatehour=最大日期
和wiki='es'
现在,在BigQuery中,您可以声明一个包含目标日期的变量。下面是一个例子:
设置最大日期默认值从“fh bigquery.wikipedia\u v3.pageviews\u 2019”WHERE wiki='es'中选择DATEMAXdatehour;
选择MaxView
来自“fh bigquery.wikipedia\u v3.pageviews\u 2019”
其中DATEdatehour=最大日期
和wiki='es'
谢谢,我的数据有延迟,有时会延迟2天,这意味着最大日期并不总是当前日期可能的最大延迟是什么?2天?3天?这是随机的,从今天到4天,我在考虑首先根据DATE_SUBCURRENT_DATE、INTERVAL 4天和DATE_SUBCURRENT_DATE、INTERVAL 1天之间的结算日期进行选择,然后在外部查询中根据该子查询结果中的最大日期进行选择。因此,相对于整个表,您将最多查询4个分区谢谢,我的数据有延迟,有时会延迟2天,这意味着最大日期并不总是当前日期最大延迟可能是多少?2天?3天?这是随机的,从今天到4天,我在考虑首先根据DATE_SUBCURRENT_DATE、INTERVAL 4天和DATE_SUBCURRENT_DATE、INTERVAL 1天之间的结算日期进行选择,然后在外部查询中根据该子查询结果中的最大日期进行选择。因此,相对于整个表,您将查询最多4个分区