Google bigquery 按最后日期和使用分区的BigQuery筛选器

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

我问过如何过滤最后的日期,得到了很好的答案,它们都可以,但是,它们扫描整个表,字段SETTLEMENTDATE是一个分区字段,有没有办法只扫描一个分区

作为一个例子,我使用这个查询

#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个分区