(转) Hive中with cube、with rollup、grouping sets用法

表结构

  1. CREATE TABLE test (f1 string,
  2.                    f2 string,
  3.                    f3 string,
  4.                    cnt int) ROW FORMAT delimited FIELDS TERMINATED BY '\t' stored AS textfile;
  5. LOAD DATA LOCAL inpath '/data/logs/suiyingli/tmp/test.data' overwrite INTO TABLE test;

原始数据

A       A       B      1
B       B       A      1
A       A       A      2

with cube查询语句

  1. SELECT f1,
  2.        f2,
  3.        f3,
  4.         sum(cnt),
  5.        GROUPING__ID,
  6.        rpad( reverse(bin(cast(GROUPING__ID AS bigint))),3,'0')
  7. FROM test
  8. GROUP BY f1,
  9.          f2,
  10.          f3 WITH CUBE;

with cube结果范例

rollup查询语句
  1. SELECT f1,
  2. f2,
  3. f3,
  4. sum(cnt),
  5. GROUPING__ID,
  6. rpad( reverse(bin(cast(GROUPING__ID AS bigint))),3,'0')
  7. FROM test
  8. GROUP BY f1,
  9. f2,
  10. f3 WITH ROLLUP;

rollup结果范例
 
grouping sets查询语句
  1. SELECT f1,
  2. f2,
  3. f3,
  4. sum(cnt),
  5. GROUPING__ID,
  6. rpad( reverse(bin(cast(GROUPING__ID AS bigint))),3,'0')
  7. FROM test
  8. GROUP BY f1,
  9. f2,
  10. f3
  11. GROUPING sets((f1),(f1,f2))
grouping sets结果范例
 

总结

cube的分组组合最全,是各个维度值的笛卡尔(包含null)组合,
rollup的各维度组合应满足,前一维度为null后一位维度必须为null,前一维度取非null时,下一维度随意,
grouping sets则为自定义维度,根据需要分组即可。
ps:通过grouping sets的使用可以简化SQL,比group by单维度进行union性能更好。

转载于:https://www.cnblogs.com/Impulse/articles/9273538.html

你可能感兴趣的:((转) Hive中with cube、with rollup、grouping sets用法)