hive sql 的三种去重方法总结

sql字段去重

在从数据库中取数据或者进行数据清洗的过程中,经常会遇到去重复问题,常用的去重方法包括三种方式。接下来主要介绍常用的三种方式以及最优方法。

  • distinct
  • group by
  • row_number() over()

需求分析

对下表中uid字段去重,并且把去重后所有字段输出。

hive sql 的三种去重方法总结_第1张图片
---

distinct方法

  • ditinct方法适合于单字段去重,但是单字段去重还要保留其他字段数据,就无法完成了;
  • distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的;
  • distinct应用到多个字段的时候,distinct必须放在开头,其应用的范围是其后面的所有字段
hive sql 的三种去重方法总结_第2张图片
---

group by 方法

  • 对group by 后面所有字段去重,并不能只对一列去重;
  • sql语句写成只对一列去重,保留其他字段,在hive上会报错

报错结果如下:

hive sql 的三种去重方法总结_第3张图片
---

row_number() over()(该方法是hive sql去重的最佳方法)

  • ROW_Number() over (partition by id order by time DESC) 给分组后的每个id加一列按某一字段倒叙排序的rank值,取rank=1
SELECT aa.uid,aa.org_name,aa.addr_no,row_number()  over (partition by aa.uid order BY aa.addr_no) as rn 
FROM stg.t_018_doc_address_spec_organization AS aa ) AS t
WHERE  t.rn =1

上述方法去重结果如下:

hive sql 的三种去重方法总结_第4张图片
---

你可能感兴趣的:(数据库相关(sql),hive,sql,大数据)