LoginSignup
1
1

More than 5 years have passed since last update.

TreasureDataでHiveクエリを書くとき - TD_X_RANKを利用しよう

Last updated at Posted at 2015-06-09

はじめに

Treasure DataはHiveの関数以外に独自関数を。。。(略

ドキュメント:Supported Hive UDFs

ドキュメントを見れば、ここから下は不要だ。

TD_X_RANK

とあるグループの中で並べられた要素に番号を振っていく関数です。まず、Order byかCluster byとかで関連カラムを並べ替える必要があります。全体に順番つけるの無理なので注意してください。

Signature
long TD_X_RANK(keys)

利用例

下のような成績データがあります。AクラスとBクラスの成績です。
これをクラス、成績で並べ替えます。

time class id score
2015-06-09 A 1 90
2015-06-09 A 2 95
2015-06-09 A 3 90
2015-06-09 A 4 30
2015-06-09 A 5 40
2015-06-09 A 6 75
2015-06-09 A 7 99
2015-06-09 A 8 89
2015-06-09 A 9 75
2015-06-09 A 10 80
2015-06-09 B 1 50
2015-06-09 B 2 95
2015-06-09 B 3 90
2015-06-09 B 4 90
2015-06-09 B 5 40

並べ替えます。td_x_rankに指定するのはclassなんで注意してください。scoreを囲みたくなりますが、class....

select class,td_x_rank(class) as rank , score,id
from ( select class, score ,id from testx order by class ,score desc,id) t

各クラスで成績が良い順に番号が付きましたね!

class rank score id
A 1 99 7
A 2 95 2
A 3 90 1
A 4 90 3
A 5 89 8
A 6 80 10
A 7 75 6
A 8 75 9
A 9 40 5
A 10 30 4
B 1 95 2
B 2 90 3
B 3 90 4
B 4 50 1
B 5 40 5

まとめ

なんで同じ点数なのに番号増えているの?的な話は下の記事を読むとさらに理解が深まります。(私が書いたんじゃないですが。。)

TreasureDataのUDFとPrestoでのRank関数の挙動について

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1