Hive中的GROUP BY功能,本质上是对数据进行分组统计的常用操作。很多刚接触Hive的朋友,往往只知道它可以配合聚合函数计算数量、求和等基础指标,但实际上,它的能力远不止于此。下面梳理了几种典型使用场景,看看你平时用到了几个。

先看最基础的几个:
COUNT()——统计每个分组内的记录总数,是日常最常用的聚合函数;
SUM()——计算总和,比如按部门汇总销售额;
AVG()——计算平均值,例如每个人的平均成绩;
MIN()和MAX()——分别获取分组中的最小值与最大值,操作非常直观。
接下来是稍进阶的用法——带DISTINCT的聚合函数:
AVG(DISTINCT column_name):计算每个分组内某一列去重后的平均值;
SUM(DISTINCT column_name):计算每个分组内某一列去重后的总和;
COUNT(DISTINCT column_name):统计每个分组内某一列不同值的数量——这在去重统计场景中特别实用。
再介绍一个比较特殊的函数:GROUP_CONCAT——它可以把分组内某一列的所有值拼接成一个字符串,并支持自定义分隔符(默认是逗号)。例如,想查看每个人曾使用过的设备类型列表,用它就能一次性提取。
最后值得提及的是HIVE_MAPJOIN(table_alias)。虽然严格来说它不属于GROUP BY的直接功能,但在分组统计的查询中,如果有一张小表需要参与JOIN,这个操作可以将小表全量加载到内存,以键值对形式加速JOIN执行,效果非常显著。在大数据场景下,这个优化手段几乎是必用的。
总之,Hive的GROUP BY配合以上这些函数,基本能覆盖日常数据分析中的各类分组统计需求。根据实际情况灵活选用,往往能让查询效率与分析粒度都提升一个层次。
