我有两个表,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工具级别附加查询,是否有更好的方法?
答案 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`