在Hive数据处理过程中,row_number()是一款频繁登场的重要工具——作为窗口函数,它能为结果集中的每一行分配一个唯一且连续的整数序号,具体顺序由你设定的排序规则决定。简单来说,它相当于为数据贴上“顺序标签”,让每条记录都拥有专属的位置编号。

那么,这个函数到底能应用在哪些场景?以下几个典型用途值得重点关注:
为数据集添加行号。 当你需要为每行数据赋予独立序号时,row_number()是最直接的选择方案。例如,将事件按日期排列好顺序,再依次分配编号,便于后续按序引用或标记处理。
分组内排名。 如果希望先按某个维度对数据分组,然后在组内依据特定列的值进行排序排名,row_number()同样可以胜任。举个例子,按照销售额对客户进行分组,然后在每个组内为客户标注排名高低,谁第一、谁第二,一目了然。
数据过滤筛选。 有些场景下,我们需要根据排名或序号来过滤记录——比如仅保留排名前10位的客户。借助row_number()生成的序号,配合子查询或CTE(公共表表达式),这一操作会变得异常简洁高效。
数据转换与ETL。 在数据预处理或ETL流程中,为每条记录加上行号往往能简化后续的关联、去重或拼接操作。例如,将无序的数据集转换为带行号的有序表格,后续处理时即可按行号精准定位或引用。
当然,使用row_number()时有一个硬性前提:必须通过OVER子句明确指定排序规则,否则函数无法正常执行。此外需要特别留意的是,row_number()会给每一行分配独一无二的序号——即使两行数据的排序值完全相同,它们的序号也不会重复。如果遇到并列情况,你希望并列的行获得相同排名,那就需要改用dense_rank()或rank()了。
