row_number()函数为Hive查询结果生成唯一连续序号,支持与ORDERBY配合实现全局排序,也可通过OVER子句结合PARTITIONBY与ORDERBY在分区内重新编号,常用于数据去重,每组仅保留序号为1的行即每组第一条记录,也可用于分组TopN查询和数据清洗等场景。
Hive row_number()常见查询用法
作者:技术拾光
时间:2026-06-29
浏览:409
文章目录
在Hive的日常数据处理中,`row_number()` 函数绝对算得上高频工具。它的核心作用很简单——为结果集中的每一行分配一个唯一且连续的整数,就像给数据打上序号一样。别看原理简单,实际用起来花样很多。
row_number() 函数基础用法
先从最基础的排序说起。需要按某个字段排好序,再给每行标个序号?`row_number()` 配合 `ORDER BY` 就能轻松搞定。比如按时间戳给事件排序,每条记录就都能拿到一个递增的序号,这在分析时间序列数据时非常顺手。SELECT column1, column2, ROW_NUMBER() OVER (ORDER BY timestamp_column) AS row_numFROM your_table;
分组内排序
更常见的是在分组内部进行编号。比如按部门给员工排名,或者按地区对销售额排序——这时候就得用 `PARTITION BY` 指定分组字段,再配合 `ORDER BY` 决定组内的排序顺序。每个组内的序号都会从1重新开始,用起来特别灵活。SELECT column1, column2, ROW_NUMBER() OVER (PARTITION BY column3 ORDER BY column4) AS row_numFROM your_table;
数据去重经典用法
去重场景里,`row_number()` 更是经典搭档。当表中存在重复行时,先通过 `PARTITION BY` 把相同的数据划到一个组,再按某个字段排序(比如可以用主键或时间戳),然后每组只取序号为1的那一行——重复数据就被干净利落地过滤掉了。这种写法比单纯的 `DISTINCT` 更可控,尤其在需要保留特定顺序或字段的情况下。WITH numbered_rows AS (SELECT column1, column2, ROW_NUMBER() OVER (PARTITION BY column3 ORDER BY column4) AS row_numFROM your_table)SELECT column1, column2FROM numbered_rowsWHERE row_num = 1;
总结
总的来说,`row_number()` 在 Hive 里是个万金油级别的窗口函数,排序、分组、去重,样样都能派上用场。掌握好它,很多数据处理需求都能迎刃而解。实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。
相关文章