我不断收到错误消息
Query exceeded resource limits. 2730.807817954678 CPU seconds were used, and this query must use less than 2500.0 CPU seconds. at [2:3]
起初我正在运行此查询:
create temp table data as
select *
from table
left join othertable
using(caseid);
EXECUTE IMMEDIATE (
SELECT """
SELECT caseid, """ ||
STRING_AGG("""MAX(IF(code = '""" || code || """', 1, 0)) AS _""" || REPLACE(code, '.', '_'), ', ')
|| """
FROM data
GROUP BY caseid
"""
FROM (
SELECT DISTINCT code
FROM data
ORDER BY code
)
);
我认为可能是太多的记录(750万条记录),所以我将查询范围缩小到了这个范围:
create temp table data as
select *
from table
left join othertable
using(caseid)
where year = "2009";
EXECUTE IMMEDIATE (
...
);
这应该只有大约150,000条记录。只是这一次我仍然遇到相同的错误,它只是减少了CPU秒的最大限制。以前,它告诉我它必须使用少于10,000 CPU秒,然后当我减小查询的大小时它告诉我它必须少于2500 CPU秒(如上面的初始错误消息所示)。
为什么更改CPU秒数限制,如何解决此问题?
答案 0 :(得分:1)
这与您正在处理的数据量无关。由于您使用的不是固定费率,因此查询由扫描(处理)的数据量来收费。您可以想象在给定的数据量上允许的处理上限(或CPU时间)。
人们大部分时间都碰到这种情况,因为他们对数据进行了过多的计算。解决此问题的一种方法是将查询分解为较小的步骤,并实现介于两者之间的中间状态(也许使用临时表)。