【问题标题】:ARRAY_AGG leading to OOMARRAY_AGG 导致 OOM
【发布时间】:2016-08-08 14:15:20
【问题描述】:

我正在尝试运行一个非常简单的查询,但它失败并出现 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 个字段组成(其中大部分是短字符串)
  • 单个 responsemax(count()) 有点低 (165)

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

【问题讨论】:

    标签: google-bigquery


    【解决方案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;
    

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

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多