文章摘要
本文介绍了Hive数据去重的两种常用方法:`distinct` 和 `group by`。`distinct` 可以用于单列或多列去重,语法简单,例如 `select distinct name from A` 可对 `name` 列去重,而 `select distinct id,name from A` 则可对 `id` 和 `name` 列同时去重。需要注意的是,`distinct` 必须作为第一个关键字使用,否则会报错。 与之相比,`group by` 是按指定列分组查询,通常需要配合聚合函数(如 `sum`、`avg` 等)。例如 `select a,sum(b) from A group by a` 可按 `a` 列分组,并聚合 `b` 列。需要注意的是,`group by` 的结果中必须包含聚合函数,而 `distinct` 语句不需要。 两者的区别在于:`distinct` 只去除重复行,`group by` 则会按指定列分组,并在结果中生成分组信息。两者的执行计划也不相同。`distinct` 只是去除重复记录,而 `group by` 通常用于更复杂的查询场景。
目录1.distinct消除重复行2.group by 分组语句3.区别总结
实现数据去重有两种方式 :distinct 和 group by
distinct支持单列、多列的去重方式。
单列去重的方式简明易懂,即相同值只保留1个。
多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。
(1)作用于单列
select distinct name from A //对A表的name去重然后显示
(2)作用于多列
select distinct id,name from A //对A表的id和name去重然后显示
注意,distinct作用于多列的时候只在开头加上即可,并不用每个字段都加上。
distinct必须在开头,在中间是不可以的,会报错。
select id,distinct name from A //错误
(3)配合count使用
select count(distinct name) from A //对A表的不同的name进行计数
select name from A group by name //跟上述等价,对name分组,相当于去重。
在使用group by的时候,前边一般会有聚合语句,例如sum,一些没有聚合的字段必须要加到group by 后边。
select a,sum(b) from A group by a //后边必须要有a,否则报错
其实二者没有什么可比性,但是对于不包含聚集函数的GROUP BY操作来说,和DISTINCT操作是等价的。不过虽然二者的结果是一样的,但是二者的执行计划并不相同。
distinct只是将重复的行从结果中出去;
group by是按指定的列分组,一般这时在select中会用到聚合函数。
distinct是把不同的记录显示出来。
group by是在查询时先把纪录按照类别分出来再查询。
group by 必须在查询结果中包含一个聚集函数,而distinct不用。
到此这篇关于Hive数据去重的两种方式的文章就介绍到这了,更多相关Hive数据去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:hive数据仓库新增字段方法
© 版权声明
文章版权归作者所有,未经允许请勿转载。