【发布时间】:2014-05-01 06:32:13
【问题描述】:
我正在编写一个后台作业来自动处理 BigQuery 中的 A/B 测试数据,并且我发现在执行大型 GROUP EACH BY 语句时我遇到了“查询执行期间超出资源”的问题。我从Resources Exceeded during query execution 看到,减少组的数量可以使查询成功,所以我将数据分成更小的部分,但我仍然遇到错误(虽然不太频繁)。如果能更好地了解究竟是什么导致了这个错误,那就太好了。特别是:
- “资源超出”是否总是意味着分片内存不足,还是也意味着任务超时?
- 估算内存使用情况和可用总内存的正确方法是什么?我是否正确假设每个分片跟踪大约 1/n 组并保留每个组的组密钥和所有聚合,还是我应该考虑另一种方式?
- 分片数量如何确定?特别是,如果我在较小的数据集上进行查询,是否会获得更少的分片/资源?
有问题的查询看起来像这样(实际上,它被用作子查询,外部查询聚合结果):
SELECT
alternative,
snapshot_time,
SUM(column_1),
...
SUM(column_139)
FROM
my_table
CROSS JOIN
[table containing 24 unix timestamps] timestamps
WHERE last_updated_time < timestamps.snapshot_time
GROUP EACH BY alternative, user_id, snapshot_time
(这是一个失败的作业示例:124072386181:job_XF6MksqoItHNX94Z6FaKpuktGh4)
我意识到这个查询可能是自找麻烦,但在这种情况下,表只有 22MB,查询结果不到一百万个组,它仍然因“超出资源”而失败。减少一次处理的时间戳数量可以修复错误,但我担心我最终会达到足够大的数据规模,以至于这种方法作为一个整体将停止工作。
【问题讨论】:
标签: google-bigquery