(轉) 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性能更好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM