Hive分析関数のntile、ランキング関数学習

2004 ワード

1、Nutile使用
秩序化されたデータセットを指定された数(num)のバケツに平均的に割り当て、バケツ番号を各行に割り当てると見なすことができます.平均配分ができない場合は、小さい番号のバケツを優先的に配分し、各バケツに入れる行数は最大1まで異なる.構文は、ntile(num)over([partition_clause]order_by_clause)as your_bucket_numは、バケツ番号に基づいて、前後のn分の数のデータを選択することができる.データは完全に表示され、対応するデータにラベルを付けるだけです.具体的に何点かのデータを取るには、ラベルに基づいて取り出すようにネストする必要があります.1.1、全体スライス
select uid,sum(amount) pay_amount,ntile(100)over(order by sum(amount) desc) til
from data_chushou_pay_info
where pt_day between '2017-01-01' and '2017-11-14' and state=0
group by uid;

select pt_month,sum(amount) pay_amount,ntile(3)over(order by sum(amount) desc) til
from data_chushou_pay_info
where pt_month between '2017-01' and '2017-11' and state=0
group by pt_month;

1.2、グループ内のスライス
select pt_month,pt_day,sum(amount) pay_amount,ntile(3)over(partition by pt_month order by sum(amount) desc) til
from data_chushou_pay_info
where pt_month between '2017-09' and '2017-11' and state=0
group by pt_month,pt_day;

2、ランキング関数
ROW_NUMBER() 
-1から順にグループ内レコードのシーケンスを生成する
RANKとDENSE_RANK
-RANK()はパケット内のデータ項目の順位を生成し、順位が等しいと順位に空席が残る-DENSE_RANK()はパケット内のデータ項目の順位を生成し、順位が等しいと順位に空席が残らない
2.1、グループの3種類のランキング
select pt_month,uid,sum(amount) pay_amount,
ROW_NUMBER()over(partition by pt_month order by sum(amount) desc) rk1,
RANK()over(partition by pt_month order by sum(amount) desc) rk2,
DENSE_RANK()over(partition by pt_month order by sum(amount) desc) rk3
from data_chushou_pay_info
where pt_day between '2017-01-01' and '2017-11-14' and state=0
group by pt_month,uid;

2.2、全体の3種類のランキング
select pt_month,uid,sum(amount) pay_amount,
ROW_NUMBER()over(order by sum(amount) desc) rk1,
RANK()over(order by sum(amount) desc) rk2,
DENSE_RANK()over(order by sum(amount) desc) rk3
from data_chushou_pay_info
where pt_day between '2017-01-01' and '2017-11-14' and state=0
group by pt_month,uid;