需求
将下表中id去重,并把去重后所有字段输出

说道去重相信大部分人脑海中第一反应是:
- distinct
的确如此,distinct非常适合对于单个字段进行去重的操作,但是对于上面的需求貌似不好处理
第二反应是: - group by
如果是Mysql操作当然没问题:
SELECT id,month,label FROM t4 GROUP BY id;
结果:

但是Hive做同样的操作就会报错:
FAILED: SemanticException [Error 10025]: Line 1:42 Expression not in GROUP BY key 'month','label'
Hive去重最佳方法----row_number()
select id,month,flag from (select id,month,flag,row_number()
over (partition by id order by month desc) as rn from view1) t where t.rn = 1;
结果:
+---+------+----+
| id| month|flag|
+---+------+----+
|133|201901| 1|
|134|201812| 1|
+---+------+----+
结论
Hive去重,最好使用row_number()函数
3087

被折叠的 条评论
为什么被折叠?



