Bigquery不缓存子查询吗?

时间:2019-09-17 04:44:06

标签: google-bigquery

我有两个表,TODAYDUID变化很大,并且                    UNITARCHIVE每天仅更改一次。

我尝试了这个简单的查询

SELECT duid FROM `test-187010.aemodataset.TODAYDUID` where date(settlementdate)=current_date('+10:00')
UNION ALL
SELECT duid FROM `test-187010.ReportingDataset.UNITARCHIVE` 

运行查询后,第二次尝试不使用缓存时,会再次尝试该查询吗?

我知道表TODAYDUID中的第一个子查询不能被缓存,因为它正在使用current_date,并且确实发生了变化,但是我希望第二个子查询被缓存。

我目前的解决方法是分别导入查询并在BI工具级别附加查询,是否有更好的方法?

2 个答案:

答案 0 :(得分:1)

这里只有一个查询,并且正如您所注意到的,它包含一个current_date(),这使其不可缓存。

如果您要为BI Engine优化表,最好这样做:

CREATE OR REPLACE TABLE `p.d.t_for_bi`
AS

SELECT duid FROM `test-187010.aemodataset.TODAYDUID` where date(settlementdate)=current_date('+10:00')
UNION ALL
SELECT duid FROM `test-187010.ReportingDataset.UNITARCHIVE` 
#or whatever query

并将仪表板指向p.d.t_for_bi表。

答案 1 :(得分:1)

作为缺少CURRENT_DATE缓存的解决方法,您可以声明一个变量并在查询中使用它。只要变量的值相同,查询就会被缓存:

DECLARE target_date DATE DEFAULT CURRENT_DATE('+10:00');

SELECT duid FROM `test-187010.aemodataset.TODAYDUID` where date(settlementdate)=target_date
UNION ALL
SELECT duid FROM `test-187010.ReportingDataset.UNITARCHIVE`