我有BigQuery数据库,执行30秒后看到错误:
查询超出资源限制。 34012.91515312311 CPU秒为使用,并且此查询必须使用少于20200.0 CPU秒。
使用此类查询时:
SELECT
b.date as Date,
SUM(b.revenue) as Revenue
FROM `dataset.a` a
JOIN `dataset.b` b ON b.id = a.low_id OR UPPER(b.id) = a.high_id
WHERE DATE(a.date_and_time) >= DATE('2020-02-01')
AND DATE(a.date_and_time) <= DATE('2020-02-25')
GROUP BY b.date
ORDER BY b.date
我注意到,如果删除分组并仅返回b
记录,它将起作用并持续40秒。但是,当我从JOIN中删除b.id = a.low_id
或UPPER(b.id) = a.high_id
时,它将起作用并持续3秒钟!
您能否解释这种行为?使此查询有效而无需购买额外的插槽是真的吗?
尝试使用此技巧。它从两个id构造一个数组,然后取消嵌套它们。剩下的就是您的JOIN
:
SELECT b.date as Date, SUM(b.revenue) as Revenue
FROM `dataset.a` a JOIN
(`dataset.b` bl CROSS JOIN
UNNEST(ARRAY(a.low_id, a.hi_id)) a_id
)
ON bl.id = a.a_id
WHERE DATE(a.date_and_time) >= DATE('2020-02-01') AND
DATE(a.date_and_time) <= DATE('2020-02-25')
GROUP BY b.date
ORDER BY b.date