我的查询失败,出现错误"资源超出"。导致此错误的原因是什么,我该如何解决?
答案 0 :(得分:6)
更新(2016-03-16):对于大多数查询,不再需要EACH,实际上可能会增加查看此错误的可能性。如果从查询中的每个JOIN和GROUP BY中省略EACH关键字,查询引擎现在将动态优化您的查询以消除此错误。
仍然有一些极端情况,指定EACH关键字可以使查询运行(或运行得更快),但一般来说,BigQuery团队建议您先尝试查询而不使用EACH。很快,EACH关键字将成为一个完整的无操作。
原始答案:当您在JOIN EACH或GROUP EACH BY中使用EACH关键字时,或者当您使用PARTITION BY子句时,BigQuery会根据您的数据分区(“随机播放”)您的数据连接键或组键,允许每个工作任务在本地执行其部分连接或聚合。
当一个这样的工作程序获取太多数据并超过其限制时,会发生资源超出错误。一般来说,这种错误的原因分为两类:
偏斜:数据严重偏向一个键值(例如,“访客”用户ID或空键),这意味着一个工作人员获取该密钥的所有记录并且过载。
数据大小和工作人员数量不匹配:您有太多关于BigQuery为您的查询分配的工作人员的数据。
我们正在进行一些改进,以帮助我们应对这两种情况,这样您就不必担心这些问题。但是,现在,您可以使用以下方法之一解决问题:
过滤掉倾斜的键。如果您的数据存在偏差,因为您的一半连接键值实际上为空,则可以通过在加入前添加WHERE key IS NOT NULL
来过滤掉这些数据。
减少处理的数据量。使用WHERE ABS(HASH(key)) % 5 == 0
过滤联接的每一侧,将联接应用于仅1/5的数据(或您想要的任何分数),然后对== 1
,== 2
执行相同操作,在单独的查询中== 3
,== 4
。您手动将数据分成较小的块以使查询通过 - 但请注意,您支付5倍的费用,因为您查询了相同的数据5次。
重温您的查询。也许您可以以完全不同的方式构建查询,或者计算一些中间结果,以获得您想要的答案。
答案 1 :(得分:0)
也遇到了错误
错误:查询执行期间超出了资源
由于使用ORDER BY
。有关更多信息,请参见Pentium10
在大数据数据库上使用order是不常见的操作, 在某些时候,它超出了大数据资源的属性。您 应该考虑将您的查询分片或通过 导出的数据。
正如我今天在your other question中向您解释的那样,添加
allowLargeResults
将允许您返回较大的响应,但是您 不能指定顶级ORDER BY,TOP或LIMIT子句。这样做 抵消了使用allowLargeResults
的好处,因为查询 输出不再可以并行计算。
为解决这个问题,我经历了9 steps