hive的高级分组聚合是指在聚合时使用GROUPING SETS、CUBE和ROLLUP的分组聚合。
高级分组聚合在很多数据库类SQL中都有出现,并非hive独有,这里只说明hive中的情况。
使用高级分组聚合不仅可以简化SQL语句,而且通常情况下会提升SQL语句的性能。
1.Grouping sets 的使用
示例:
-- 使用方式
select a,b,sum(c) from tbl group by a,b grouping sets(a,b)
Grouping sets的子句允许在一个group by 语句中,指定多个分组聚合列。所有含有Grouping sets 的子句都可以用union连接的多个group by 查询逻辑来表示。
如下一些常见的等价替换示例:
-- 语句1
select a, b sum(c) from tbl group by a,b grouping sets((a,b))
-- 相当于
select a,b,sum(c) from tbl group by a,b
-- 语句2
select a,b,sum(c) from tbl group by a,b grouping sets((a,b),a)
-- 相当于
select a,b,sum(c) from tbl group by a,b
union
select a,null ,sum(c) from tbl group by a
-- 语句3
select a,b,sum(c) from tbl group by a,b grouping sets(a,b)
-- 相当于
select a,null,sum(c) from tbl group by a
union
select null ,b,sum(c) from tbl group by b
-- 语句4
select a,b,sum(c) from tbl group by a,b grouping sets((a,b),a,b,())
-- 相当于
select a,b,sum(c) from tbl group by a,b
union
select a,null,sum(c) from tbl group by a
union
select null,b,sum(c) from tbl group

文章详细介绍了Hive中的高级分组聚合功能,包括GROUPINGSETS、CUBE和ROLLUP的使用方法及示例,展示了如何通过这些功能简化SQL语句并可能提升性能。通过实例分析了不同分组聚合操作的执行计划,说明了它们在数据扫描和查询优化上的作用,但也提醒注意过度使用可能导致的数据膨胀问题和资源管理。
最低0.47元/天 解锁文章
2856

被折叠的 条评论
为什么被折叠?



