需求:求 app,channel,province 任意组合下的用户数,用一个 sql 实现,上面一 条记录会产生多条记录。
hive> select * from app; OK 消消乐 ios 北京 abc 王者荣耀 Android 上海 cde Time taken: 0.479 seconds, Fetched: 2 row(s) hive> select app,channel,province,count(userid) as total_user_count from app group by app,channel,province with cube; Total MapReduce CPU Time Spent: 9 seconds 350 msec OK NULL NULL NULL 2 NULL NULL 上海 1 NULL NULL 北京 1 NULL Android NULL 1 NULL Android 上海 1 NULL ios NULL 1 NULL ios 北京 1 消消乐 NULL NULL 1 消消乐 NULL 北京 1 消消乐 ios NULL 1 消消乐 ios 北京 1 王者荣耀 NULL NULL 1 王者荣耀 NULL 上海 1 王者荣耀 Android NULL 1 王者荣耀 Android 上海 1 Time taken: 82.009 seconds, Fetched: 15 row(s) hive> select app,channel,province,count(userid) as total_user_count from app group by app,channel,province with rollup; Total MapReduce CPU Time Spent: 6 seconds 440 msec OK NULL NULL NULL 2 消消乐 NULL NULL 1 消消乐 ios NULL 1 消消乐 ios 北京 1 王者荣耀 NULL NULL 1 王者荣耀 Android NULL 1 王者荣耀 Android 上海 1 Time taken: 53.346 seconds, Fetched: 7 row(s) hive> select app,channel,province,count(userid) as total_user_count from app group by app,channel,province grouping sets((app),(app,province)); Total MapReduce CPU Time Spent: 6 seconds 150 msec OK 消消乐 NULL NULL 1 消消乐 NULL 北京 1 王者荣耀 NULL NULL 1 王者荣耀 NULL 上海 1 Time taken: 42.786 seconds, Fetched: 4 row(s)
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相关联的选择列表中才允许分组。



