hive常见问题 1.hive几种去重方式

  1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重
    (1) 当distinct应用到多个字段的时候,distinct必须放在开头,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面
    (2) distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的
    (3) 聚合函数中的DISTINCT,如 COUNT( ) 会过滤掉为NULL 的项
  2. group by用法:对group by 后面所有字段去重,并不能只对一列去重。
select 去重字段 from 表名 group by 去重字段
  1. 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
  1. 使用group_concat函数
select group_concat(distinct 去重字段) from 表名 group by 去重字段