【问题标题】:Resources Exceeded during query execution查询执行期间超出资源
【发布时间】:2013-05-10 18:57:18
【问题描述】:

我正在尝试运行加入 2 个大型数据集的查询,并且在查询执行错误期间遇到了超出的资源。我读过在使用 Join Each 和 Group Each 时有一些解决方法,但不是那些解决方法。

SELECT 
  year(users.firstseen) as first_year,
  month(users.firstseen) as first_month, 
  DATEDIFF(orders.timestamp,users.firstseen) as days_elapsed,
  count(orders.user_key) as count_orders
FROM 
  [project.orders] as orders
JOIN EACH
  [project.users] AS users
ON
  orders.user_key = users.user_key
WHERE orders.store = 'ios'
GROUP EACH BY 1,2,3

编辑:以下工作:

SELECT
  year(users.firstseen) as firstyear,
  month(users.firstseen) as firstmonth,
  DATEDIFF(orders.timestamp, users.firstseen) as days_elapsed,
  COUNT(users.firstseen) AS count_orders FROM [project.orders] as orders
JOIN EACH( SELECT user_key, firstseen FROM [project.users]
WHERE store_key = 'ios') as users ON orders.user_key = users.user_key
GROUP BY firstyear, firstmonth, days_elapsed
ORDER BY firstyear, firstmonth, days_elapsed

【问题讨论】:

  • 这最终工作 SELECT year(users.firstseen) as firstyear, month(users.firstseen) as firstmonth, DATEDIFF(orders.timestamp, users.firstseen) as days_elapsed, COUNT(users.firstseen) AS count_orders FROM [project.orders] as orders JOIN EACH( SELECT user_key, firstseen FROM [project.users] WHERE store_key = 'ios') as users ON orders.user_key = users.user_key GROUP BY firstyear, firstmonth, days_elapsed ORDER BY firstyear , firstmonth, days_elapsed

标签: sql google-bigquery


【解决方案1】:

如果您的连接键(在本例中为 user_key)分布不均,JOIN EACH 可能会失败。例如,如果您有一个经常出现异常的 user_key,您将从处理该密钥的节点收到“资源超出”错误。或者,您可以尝试通过在加入之前过滤掉部分用户键来对一组较小的用户键运行查询。

如果您有太多不同的组键,GROUP EACH BY 可能会失败。您可以尝试通过添加更多 WHERE 子句来减少连接输出,以查看是否是这种情况。

基本上,我建议减少 JOIN EACH 或 GROUP EACH BY 的输入,直到您使查询正常工作,然后您将更好地了解您遇到的限制。一旦知道了这一点,您就可以(希望)构建查询以充分利用可用资源。

(顺便说一句,我们希望在不久的将来调整这些操作,以消除您可能遇到的一些限制!)

【讨论】:

  • 看起来有一个产生 0 个匹配的 JOIN EACH 也会触发此错误(在左 200 万、右 1.8 亿的连接上测试)。
  • 零匹配的 JOIN EACH 本身不太可能是罪魁祸首。更有可能的是,在 JOIN EACH 之前或之后的查询中还有一些其他子句超出了给定工作节点的可用资源。如果您将工作 ID 发送到 jcondit@google.com,我可以仔细查看。
  • @JeremyCondit 你有关于约束的更新吗?
  • 进行中! GROUP BY 已经更新,并且在动态分区数据方面可能比 GROUP EACH BY 做得更好。我们仍在解决 JOIN 的一些问题,但它也会很快更新。
  • 嗨,我的查询订单也失败了SELECT * FROM [kaggle_bank_raw.cleaned_train] order by ncodpers你能看看吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多