我正在尝试对Snowflake中的8个不同元素进行GROUP BY CUBE()
,但根据文档,“ Snowflake在每个多维数据集中最多允许7个元素(相当于128个分组集)”。
这是我需要运行的查询之一的限制。查询的基本形式如下
SELECT A, B, C, D, E, F, G, H
FROM (
SELECT '1' AS A, '2' AS B, '3' AS C, '4' AS D, '5' AS E, '6' AS F, '7' AS G, 8 AS H
) SUB
GROUP BY CUBE(A,B,C,D,E,F,G,H);
如果删除了H列,则可以正常工作。但是当我在查询中添加H时,我得到了
SQL编译错误:分组集(256)超过了允许的最大分组集(128)
如何获得具有8个元素的GROUP BY CUBE
的相同结果?我做了一些研究,看来GROUP BY GROUPING SETS
可以工作,但在同一查询块中仍然有128个分组集限制。
答案 0 :(得分:1)
您可以通过两个操作的并集来生成2 ^ 8组合:一个带有GROUP BY CUBE(A,B,C,D,E,F,G), H
的多维数据集-一个没有H的多维数据集,并将其设置为空。
with data as (
SELECT '1' AS A, '2' AS B, '3' AS C, '4' AS D, '5' AS E, '6' AS F, '7' AS G, 8 AS H
)
SELECT A, B, C, D, E, F, G, H
FROM data
GROUP BY CUBE(A, B, C, D, E, F, G), H
union all
SELECT A, B, C, D, E, F, G, null
FROM data
GROUP BY CUBE(A, B, C, D, E, F, G)
您可以通过更少的组合来证明这一点:
SELECT A, B, C
FROM data
GROUP BY CUBE(A, B), C
union all
SELECT A, B, null
FROM data
GROUP BY CUBE(A, B)
您会看到它给出的结果与GROUP BY CUBE(A,B,C)
相同。
答案 1 :(得分:0)
蛮力方法是union all
:
select null as a, b, c, d, e, f, g, h
from t
group by cube (b, c, d, e, f, g, h)
union all
select a, null as b, c, d, e, f, g, h
from t
group by cube (a, c, d, e, f, g, h)
union all
. . .
这对于8列是可行的。如果您还有其他内容,将会变得很麻烦。
如果仅使用cube
来生成行,则可能有更简单的方法来完成相同的事情。