Hive row_number()重复行处理技巧

作者:技术拾光时间:2026-06-29 08:38:12浏览:654

在Hive中,row_number()窗口函数为每个分区的行按指定顺序分配唯一且连续的整数。即使分区列相同,只要排序列不同,编号就不同,不会出现并列排名。该函数常用于分组内的排序,适用于精确去重或选取每个分区的前N行。

在Hive中,row_number()函数用于为结果集中的每一行分配一个连续且唯一的整数。使用时需要指定排序规则,以便确定编号的顺序。

Hive row_number()函数语法示例

Hive row_number()重复行处理技巧

SELECT column1, column2, ..., row_number() OVER (PARTITION BY column1, column2 ORDER BY column3 DESC) as row_numFROM your_table;

上面这条SQL中,PARTITION BY子句将结果集按column1和column2的值划分为多个独立分区,每个分区内再按照column3降序排列。随后row_number()为每个分区内的每一行生成从1开始的连续编号,编号列命名为row_num。

row_number()处理重复行的关键特性

关键点在于:即使column1和column2完全相同,只要column3值不同,它们获得的row_num也必然不同。换言之,row_number()对每一行实现“唯一定位”,不会像rank()或dense_rank()那样产生并列编号。这一特性在需要精确去重或按顺序选取前N行时尤为实用。