当我运行以下查询时,出现“超出资源限制”错误。如果我删除最后一行(order by 子句),它会起作用:
SELECT
id,
INTEGER(-position / (CASE WHEN fallback = 0 THEN 2 ELSE 1 END)) AS major_sort
FROM (
SELECT
id,
fallback,
ROW_NUMBER() OVER(PARTITION BY fallback) AS position
FROM
[table] AS r
ORDER BY
r.score DESC ) AS r
ORDER BY major_sort DESC
实际上最后一行是:
ORDER BY major_sort DESC, r.score DESC
但这也不可能让事情变得更糟。
知道如何更改查询来避免这个问题吗?
((如果您想知道这个查询的作用:table
包含具有多个后备策略的“排名”,我想创建这样的排序:“AABAABAABAAB”,其中“A”和“B”是后备策略。如果您有更好的想法如何实现这一目标;请随时告诉我:D))
一个顶级的ORDER BY
将始终序列化查询的执行:它将强制所有计算到单个节点上以进行排序。这就是资源超出错误的原因。
我不确定我是否完全理解您的查询目标,因此很难提出替代方案,但您可以考虑放置一个ORDER BY
内的条款OVER(PARTITION BY ...)
条款。对单个分区进行排序可以并行完成,并且可能更接近您想要的结果。
有关订购的更一般建议:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)