BigQuery超过CPU限制

时间:2020-10-20 21:19:24

标签: google-bigquery

我不断收到错误消息

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秒数限制,如何解决此问题?

1 个答案:

答案 0 :(得分:1)

这与您正在处理的数据量无关。由于您使用的不是固定费率,因此查询由扫描(处理)的数据量来收费。您可以想象在给定的数据量上允许的处理上限(或CPU时间)。

人们大部分时间都碰到这种情况,因为他们对数据进行了过多的计算。解决此问题的一种方法是将查询分解为较小的步骤,并实现介于两者之间的中间状态(也许使用临时表)。