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

2021-10-11 16:28:16 字數 1027 閱讀 2436

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

hive支援兩種語法:

row_number() over( partition by 分組的字段 order by 排序的字段) as rank(rank 可隨意定義表示排序的標識);

row_number() over( distribute by 分組的字段 sort by 排序的字段) as rank(rank 可隨意定義表示排序的標識)

注意:partition by 只能和order by 組合使用

distribute by 只能和 sort by 使用

**以下是具體sql:

select * from (

select *,

row_number() over ( partition by import_data_source order by created_date desc) as num

from svc.t_coupon_info

)as rs where rs.num<=30;

(ps:後續sql 是對大資料量的乙個優化過程)

select * from svc.t_coupon_info where coupon_no in (

select coupon_no from (

select coupon_no,

row_number() over ( partition by import_data_source order by import_data_source) as num

from svc.t_coupon_info

)as rs where rs.num<=30)

說一下大概思路:因為產線資料量過大,第一條sql 執行時間漫長,超時還未出結果,經過各種一頓操作,驗證sql 如下所示:

先查詢出來 索引值欄位, 然後根據該值去查詢我們所要的資料(簡直美滋滋)

這裡說明下 partition by 與 order by 同乙個欄位的時候,會節省一倍的時間,

當然我們也可以根據自身需求來order by 篩選字段

hive 分組排序,topN

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

Hive的分組排序方法 row number

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

hive中的排序和分組

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