hive使用技巧(三)——巧用group by实现去重统计

### Hive SQL 中 `GROUP BY` 和 `DISTINCT` 的区别及使用场景 #### DISTINCT 关键字 `DISTINCT` 是一种简单而直观的方法来复的数据项。当查询返回的结果集中存在多行相同的记录时,`SELECT DISTINCT` 可以确保只保留唯一的一份副本。 ```sql -- 除表t1中a字段的复值并获取唯一的a值列表 SELECT DISTINCT a FROM t1; ``` 这种方法适用于希望快速获得某列或几列组合后的不复集合的情况[^2]。 #### GROUP BY 子句 相比之下,`GROUP BY` 主要用于按特定条件对数据集进行分组处理,并通常配合聚合函数一起工作,比如统计每组的数量、求和或其他汇总操作: ```sql -- 对表t1中的a字段进行分组,并计算每一组内有多少条记录 SELECT a, COUNT(*) AS cnt FROM t1 GROUP BY a; ``` 除了基本的功能外,在某些特殊情形下,`GROUP BY` 还能起到类似于 `DISTINCT` 的作用——即通过指定单个列为分组依据从而达到消除该列冗余的目的;不过需要注意的是,这种方式并非总是最佳实践[^1]。 #### 性能考量 对于大规模数据集而言,由于 `DISTINCT` 需要在内存中构建哈希表来进行运算,因此可能会消耗较多资源而导致效率低下。相反,虽然基于磁盘I/O密集型的操作模式使得 `GROUP BY` 在执行速度上未必占优,但在面对海量级输入时往往表现更为稳定可靠[^3]。 #### 多列情况下的差异 值得注意的是,在涉及多个不同维度的同时需求时(例如同时针对id,name两列),部分数据库引擎可能不允许直接应用多次 `DISTINCT` ,此时则需借助其他手段如窗口函数或是嵌套子查询等方式绕过此限制[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值