【问题标题】:Query Failed Error: Resources exceeded during query execution: The query could not be executed in the allotted memory查询失败错误:查询执行期间资源超出:无法在分配的内存中执行查询
【发布时间】:2018-02-10 19:47:20
【问题描述】:

我使用的是标准 SQL。即使它是一个基本查询,它仍然会抛出错误。有什么建议请

SELECT 
  fullVisitorId,
  CONCAT(CAST(fullVisitorId AS string),CAST(visitId AS string)) AS session,
  date,
  visitStartTime,
  hits.time,
  hits.page.pagepath
FROM
  `XXXXXXXXXX.ga_sessions_*`,
  UNNEST(hits) AS hits
WHERE
  _TABLE_SUFFIX BETWEEN "20160801"
  AND "20170331"
ORDER BY
  fullVisitorId,
  date,
  visitStartTime

【问题讨论】:

    标签: google-bigquery bigquery-standard-sql bigdata


    【解决方案1】:

    除了公认的答案之外,您可能希望按日期对表进行分区,以减少昂贵查询使用的内存量。

    【讨论】:

    • 上述查询是拉取GA数据,默认按日期分区。 _TABLE_SUFFIX BETWEEN "20160801" AND "20170331" 这就是我从不同日期范围提取数据的方式
    【解决方案2】:

    此查询起作用的唯一方法是删除最后应用的排序:

    SELECT 
      fullVisitorId,
      CONCAT(CAST(fullVisitorId AS string),CAST(visitId AS string)) AS session,
      date,
      visitStartTime,
      hits.time,
      hits.page.pagepath
    FROM
      `XXXXXXXXXX.ga_sessions_*`,
      UNNEST(hits) AS hits
    WHERE
      _TABLE_SUFFIX BETWEEN "20160801"
      AND "20170331"
    

    ORDER BY 操作非常昂贵,不能并行处理,所以尽量避免它(或尝试在有限的结果集中应用它)

    【讨论】:

    • 谢谢威廉。它工作正常,但你能告诉我使用 order by 时它不工作的原因吗?
    • 单个节点的内存中容纳的行太多。如果您查看查询的“说明”选项卡,它将显示内存不足的位置。
    • 感谢@ElliottBrossard
    • 我遇到了同样的问题。更奇怪的是,查询在 web UI 中成功,但在 python API 中却没有。删除 ORDER BY 子句解决了这个问题,但遇到差异有点奇怪。
    • 我知道这有点老了,但是OVER (PARTITION BY ... 有同样的效果吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多