业务需求:
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!
评论