Hive 是一种基于 Hadoop 生态的常见数据仓库工具,能够将结构化数据文件映射为数据库表,并直接通过 SQL 语句进行查询——对于熟悉关系型数据库的用户而言,学习成本显著降低。但需要注意,Hive 的 SQL 在执行时会被翻译为 MapReduce 作业,因此在分组与聚合操作中,某些细节与传统数据库有所差异。

首先来看一个最基础的分组查询示例:
SELECT column1, COUNT(*) as countFROM table_nameGROUP BY column1;
这个例子很直观:从 table_name 表中选取 column1,通过 COUNT(*) 统计每组中的行数,最终按照 column1 分组输出结果。实际上,这与标准 SQL 的分组语法完全一致,上手非常顺畅。
如果需要按多个字段进行分组,只需在 GROUP BY 后列出所有要分组的列即可:
SELECT column1, column2, COUNT(*) as countFROM table_nameGROUP BY column1, column2;
非常简洁明了。Hive 会根据 column1 和 column2 的组合进行分组,并返回每组的数据量。在实际业务场景中,这种多维度聚合十分常见,例如按“城市+日期”统计用户数量。
除了计数功能,Hive 还支持一系列常用的聚合函数:SUM()(求和)、AVG()(平均值)、MIN()(最小值)、MAX()(最大值),这些函数在分组后可以直接使用。以计算平均值为例:
SELECT column1, AVG(column2) as avg_valueFROM table_nameGROUP BY column1;
以上代码按 column1 分组,然后计算每组中 column2 的平均值。从语法上看,与关系型数据库几乎相同,但底层 Hive 会将数据分发到各个 MapReduce 任务中处理。因此,面对海量数据时,这种分组聚合的效率远高于单机运行 SQL——当然,延迟也会更大,更适合批处理场景。
需要特别提醒的是:Hive 的 GROUP BY 在底层会触发 Shuffle 操作(即数据重分布),如果分组的列基数非常大,可能引发性能瓶颈。实际使用中,建议先对数据做适当的过滤或压缩,或者考虑使用 DISTRIBUTE BY 和 SORT BY 来进行优化。
