业务需求:
hive 数据去重,并根据需求取其中一条
数据案例:
| 1 | 序号 feed_id create_time tag_time | 
只需要 1,3 两行的记录,因为第 2 行的 tag_time 和第一行的重复了,所以需要将 2 行重复的去掉。
方案:
| 1 | select | 
分析:
row_number()over (partition by feed_id order by tag_time desc) num    取 num=1  的           
意思是先根据 feed_id 进行分组,并在分组内部按 tag_time  降序排序,row_number()函数计算的值就表示某个 feed_id 组内部排序后的顺序编号(该编号在一个组内是连续并且唯一的) 。
所以最后直接去每个分组内的第一个(num=1)即可。
PS:
ROW_NUMBER() OVER 函数的基本用法  
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
简单的说 row_number()从 1 开始,为每一个分组记录返回一个数字,这里的 ROW_NUMBER() OVER (ORDER BY xyz DESC)  是先把 xyz 列降序,再为降序以后的每条 xlh 记录返回一个序号。
示例:
| 1 | xyz row_num | 
- 参考链接:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kirio!
 评论
