**:
天用hive查資料時需要取每個分組的第一條資料,查了一發現hive 已經從0.11.0版本加入row_number函式,可以滿足查詢的需求。
row_number() 是從1開始,按照順序,生成分組內記錄的序列
用法如下:
row_number() over (partition by column_a order by column_b asc/desc) rnrn 是排序的別名執行時每組的編碼從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...