1.hive几种去重方式
Distinct用法:对select 后面所有字段去重,并不能只对一列去重 (1) 当distinct应用到多个字段的时候,distinct必须放在开头,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面 (2) distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的 (3) 聚合函数中的DISTINCT,如 COUNT( ) 会过滤掉为NULL 的项group by用法:对group by 后面所有字段去重,并不能只对一列去重。
select 去重字段
from 表名
group by 去重字段
ROW_Number() over()窗口函数 注意:ROW_Number() over (partition by id order by time DESC) 给每个id加一列按时间倒叙的rank值,取rank=1
select m
.id
,m
.gender
,m
.age
,m
.rank
from (select id
,gender
,age
,ROW_Number
() over(partition by id
order by id
) rank
from temp.control_201804to201806
where id
!='NA' and gender
!='' or age
!=''
) m
where m
.rank
=1
使用group_concat函数
select group_concat
(distinct 去重字段
) from 表名
group by 去重字段