是什么导致资源超出"在BigQuery?

时间:2014-06-12 18:35:38

标签: google-bigquery

我的查询失败,出现错误"资源超出"。导致此错误的原因是什么,我该如何解决?

2 个答案:

答案 0 :(得分:6)

更新(2016-03-16):对于大多数查询,不再需要EACH,实际上可能会增加查看此错误的可能性。如果从查询中的每个JOIN和GROUP BY中省略EACH关键字,查询引擎现在将动态优化您的查询以消除此错误。

仍然有一些极端情况,指定EACH关键字可以使查询运行(或运行得更快),但一般来说,BigQuery团队建议您先尝试查询而不使用EACH。很快,EACH关键字将成为一个完整的无操作。


原始答案:当您在JOIN EACH或GROUP EACH BY中使用EACH关键字时,或者当您使用PARTITION BY子句时,BigQuery会根据您的数据分区(“随机播放”)您的数据连接键或组键,允许每个工作任务在本地执行其部分连接或聚合。

当一个这样的工作程序获取太多数据并超过其限制时,会发生资源超出错误。一般来说,这种错误的原因分为两类:

  1. 偏斜:数据严重偏向一个键值(例如,“访客”用户ID或空键),这意味着一个工作人员获取该密钥的所有记录并且过载。

  2. 数据大小和工作人员数量不匹配:您有太多关于BigQuery为您的查询分配的工作人员的数据。

  3. 我们正在进行一些改进,以帮助我们应对这两种情况,这样您就不必担心这些问题。但是,现在,您可以使用以下方法之一解决问题:

    1. 过滤掉倾斜的键。如果您的数据存在偏差,因为您的一半连接键值实际上为空,则可以通过在加入前添加WHERE key IS NOT NULL来过滤掉这些数据。

    2. 减少处理的数据量。使用WHERE ABS(HASH(key)) % 5 == 0过滤联接的每一侧,将联接应用于仅1/5的数据(或您想要的任何分数),然后对== 1== 2执行相同操作,在单独的查询中== 3== 4。您手动将数据分成较小的块以使查询通过 - 但请注意,您支付5倍的费用,因为您查询了相同的数据5次。

    3. 重温您的查询。也许您可以以完全不同的方式构建查询,或者计算一些中间结果,以获得您想要的答案。

答案 1 :(得分:0)

也遇到了错误

  

错误:查询执行期间超出了资源

由于使用ORDER BY。有关更多信息,请参见Pentium10

  

在大数据数据库上使用order是不常见的操作,   在某些时候,它超出了大数据资源的属性。您   应该考虑将您的查询分片或通过   导出的数据。

     

正如我今天在your other question中向您解释的那样,添加   allowLargeResults将允许您返回较大的响应,但是您   不能指定顶级ORDER BY,TOP或LIMIT子句。这样做   抵消了使用allowLargeResults的好处,因为查询   输出不再可以并行计算。

为解决这个问题,我经历了9 steps