Hive 用ROW NUMBER取每組top n

2021-08-08 20:40:11 字數 1233 閱讀 3688

**:

天用hive查資料時需要取每個分組的第一條資料,查了一發現hive 已經從0.11.0版本加入row_number函式,可以滿足查詢的需求。

row_number() 是從1開始,按照順序,生成分組內記錄的序列 

用法如下:

row_number() over (partition by column_a order by column_b asc/desc) rn

rn 是排序的別名執行時每組的編碼從1開始 

partition by:類似hive的建表,分割槽的意思;column_a 是分組字段 

order by :排序,預設是公升序,加desc降序;column_b 是排序字段

列如:

select 

g_field,

daypv,

row_number() over(partition by g_field order

by pv desc) as rn

from test ;

g_field             day           pv       rn

group01 2015-04-1271

group01 2015-04-1152

group01 2015-04-1543

group01 2015-04-1644

group01 2015-04-1335

group01 2015-04-1426

group01 2015-04-1017

group02 2015-04-1591

group02 2015-04-1672

group02 2015-04-1363

group02 2015-04-1254

group02 2015-04-1435

group02 2015-04-1136

group02 2015-04-10

27

根據 rn就可以求出每個組的top n

select * from 

(select

g_field

pv,row_number() over(partition by g_field order

by pv desc) as rn

from test )

where rn<=1;

Hive的分組排序方法 row number

這個方法總而言之就是幫助使用者減少工作量 比如,如下結構 create table user order user id int comment 使用者id pro id int comment 產品id value string comment 查出每個使用者買的價值最高的兩個用品,如果不用row...

HIVE中ROW NUMBER 函式的講解

row number over partition by column1 order by column2 select id,dept,salary,row number over partition by dept order by salary id dept salary row numbe...

HIVE中row number函式的描述與使用場景

假設乙個場景 存在表user score,該錶的資料如下 table id rate score 1 0 4 10 2 0 4 40 3 0 4 30 4 0 4 20 5 5 10 10 6 5 10 40 7 5 10 30 8 5 10 20 9 11 20 10 10 11 20 40 11...