Edited at

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

More than 3 years have passed since last update.


はじめに

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関数の挙動について