Hive的分組排序方法 row number

2021-07-14 22:19:06 字數 892 閱讀 6138

這個方法總而言之就是幫助使用者減少工作量

比如,如下結構:

create

table user_order(

user_id int comment '使用者id'

pro_id int comment '產品id',

value string comment '**'

)

查出每個使用者買的價值最高的兩個用品,如果不用row_number費點時間也是可以寫出來的,但是用row_number就比較快捷:

select user_id,pro_id,value from (

select user_id,pro_id,value,

row_number() over (partition by user_id oreder by value desc) as flag

where flag<=2

);

除row_number外還有rank,dense_rank

以下是語法:

rank() over([partition by col1] order by col2)

dense_rank() over([partition by col1] order by col2)

row_number() over([partition by col1] order by col2)

功能差不多,但是有細微的差別

rank排序時出現相等的值時會有並列,即值相等的兩條資料會有相同的序列值

row_number的排序不允許並列,即使兩條記錄的值相等也不會出現相等的排序值

dense_rank排序的值允許並列,但會跳躍的排序,像這樣:1,1,3,4,5,5,7.

hive 分組排序,topN

hive 分組排序,topn 語法格式 row number over partition by col1 order by col2 desc rank partition by 類似hive的建表,分割槽的意思 order by 排序,預設是公升序,加desc降序 rank 表示別名 表示根據c...

hive 的分組排序用法與 Impala 分組排序

hive 的分組排序用法與 impala 分組排序 hive支援兩種語法 row number over partition by 分組的字段 order by 排序的字段 as rank rank 可隨意定義表示排序的標識 row number over distribute by 分組的字段 s...

hive中的排序和分組

order by order by 會對輸入坐全域性排序,因此 只有乙個reducer 多個reducer會無法保證全域性有序 只有乙個reducer,會導致當輸入規模較大時,需要較長的計算時間.set hive.mapred.mode nonstrict default value 預設值 set...