无法在分配的内存中执行查询[关闭]
Posted
技术标签:
【中文标题】无法在分配的内存中执行查询[关闭]【英文标题】:The query could not be executed in the allotted memory [closed] 【发布时间】:2017-10-20 16:29:38 【问题描述】:我有一个简单的查询要运行:
update`dataset.mytable`
set field_1 = cast( field_2 as int64)
where field_2 not in ('AA', 'BB')
我得到了错误:
错误:查询执行期间资源超出:无法在分配的内存中执行查询..
该表只有 10 亿行...
【问题讨论】:
Query Failed Error: Resources exceeded during query execution: The query could not be executed in the allotted memory的可能重复 @JarrodRoberson 这是一个不同的问题;没有明确的 ORDER BY。 bignano,你能分享一个演示失败的示例作业 ID 吗?我想进一步了解发生了什么。 您可以尝试再次运行您的查询吗?目前有一个bug related to loading large files 似乎在这里引起了问题,但我能够在您的表上运行一个进程,在这种特殊情况下应该可以解决它。 哦,太好了。你已经修好了。你施了什么魔法?另外,我之前在同一个表上运行了一个查询,加入了另一个相同大小的表,它需要 7227.9 秒才能完成,这正常吗? 我很高兴这有效!我将添加一个更详细解释的答案。可能是表的问题导致连接速度也比原本应该的慢。 【参考方案1】:这确实是一个错误,类似于this report。在这种情况下,您无法知道,但如果您将来确实发现了错误,您可以submit it to the issue tracker,因为更广泛的 *** 社区可能无法提供帮助。
作为对所发生事情的总结:
看起来加载到表中的文件非常大,例如每个大小为数 GB。加载较小的文件不会触发 BigQuery 错误。 将这些文件的内容持久保存到 BigQuery 存储时,BigQuery 没有充分分片表(这是 BigQuery 方面的错误)。 在执行UPDATE
语句时,BigQuery 尝试仅在少量分区中执行大量工作,从而导致出现 Resources exceeded
消息。
我能够通过手动指示 BigQuery 存储重新分片您的表来解决此问题。这不会通过 BigQuery API 公开,因为除非存在错误,否则没有必要这样做。
【讨论】:
我认为保持此内容整洁并遵守网站规则符合我们的最大利益。如果是我 - 我会代表 OP 在issuetracker.google.com/issues 上创建相应的问题并在那里处理这个 Q。只是想和你分享我的想法——我非常尊重他,所以希望你不会亲自得到这个! :o) 我认为现在结束这个问题就可以了。 OP 可以使用一个错误来跟踪潜在问题,无论如何我都能够帮助解决眼前的问题。谢谢! 感谢您的支持/理解我仍然投票赞成您的答案,因为您应得的:o) 感谢您的意见。我想知道加载到表中的文件是什么意思,这个问题中的表是通过连接前两个表创建的。您是否引用了 GCS 中加载到 BigQuery 表中的原始文件?您希望何时修复此类错误,以及在修复错误之前,我该如何防止这种情况发生在我这边? 请跟进我链接到的错误,有人应该能够帮助解释更多。以上是关于无法在分配的内存中执行查询[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
执行立即“查询”ORA-04030:尝试分配 56 字节时进程内存不足(调用堆,qerrmbv[]:qerrmObnd)
允许的内存大小为 134217728 字节已用尽(尝试分配 42 字节)[关闭]