ARRAY_AGG导致OOM

时间:2016-08-08 14:15:21

标签: google-bigquery

我正在尝试运行一个非常简单的查询,但它失败并出现Resources exceeded错误 我读到in another post,用于分配混音器数量的启发式算法可能会不时失败。

SELECT
  response.auctionId,
  response.scenarioId,
  ARRAY_AGG(response) AS responses
FROM
  rtb_response_logs.2016080515
GROUP BY
  response.auctionId,
  response.scenarioId

有没有办法解决我的查询:

  • response由38个字段组成(大多数是短字符串)
  • max(count())的{​​{1}}有点低(165)

查询失败
错误:查询执行期间超出资源 职位ID :teads-1307:bquijob_257ce97b_1566a6a3f27

1 个答案:

答案 0 :(得分:1)

当前限制是数组(由ARRAY_AGG或其他方式生成)必须适合单个机器的内存。不过,我们已经做了一些最近的改进,这些改进应该有助于减少查询所需的资源。要确认这是否是问题,您可以尝试查询,例如:

SELECT
  SUM(LENGTH(FORMAT("%t", response))) AS total_response_size
FROM
  rtb_response_logs.2016080515
GROUP BY
  response.auctionId,
  response.scenarioId
ORDER BY total_response_size DESC LIMIT 1;

这将结构格式化为字符串,作为他们将需要多少内存来表示的粗略启发式。如果结果非常大,那么我们可能会重构查询以使用更少的内存。如果结果不是很大,那么其他一些问题就在发挥作用,我们会考虑修复它:)谢谢!