在对具有数十亿行的表执行GROUP BY EACH时,我解决了资源超出错误。 然而,解决方案成本非常高,我想降低这些成本。
错误几乎不是由于分组键偏差造成的,而是由于分组键的基数过高(是否存在固定的最大值?)。
我的解决方案:
SELECT key FROM
(SELECT key FROM [table] WHERE ABS(HASH(key)) % 4 = 0 GROUP EACH BY key),
(SELECT key FROM [table] WHERE ABS(HASH(key)) % 4 = 1 GROUP EACH BY key),
(SELECT key FROM [table] WHERE ABS(HASH(key)) % 4 = 2 GROUP EACH BY key),
(SELECT key FROM [table] WHERE ABS(HASH(key)) % 4 = 3 GROUP EACH BY key)
这有效,但它多次读取我的多TB表,我相信这有点贵。 有没有降低成本的解决方案?
谢谢,鲁本
答案 0 :(得分:6)
它只从“表”中读取整个键列一次。