Edited at

TreasureDataでHiveクエリを書くとき - TD_LAST,TD_FIRST

More than 3 years have passed since last update.


はじめに

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

ドキュメント:Supported Hive UDFs

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


TD_LAST

Group by で集約された値の中で第二引数以降の値でソートを行い、一番最後になった行の第一引数に指定されたカラムの値を返します。


Signature

TD_LAST(ret_col, cmp_col1, cmp_col2, ...)



TD_FIRST

TD_LASTの逆です。


Signature

TD_FIRST(ret_col, cmp_col1, cmp_col2, ...)



使用例

下記のようなテーブルの場合の例です。

time
a
b
c
str

2015-06-06 21:00:00
1
1
4
aaa

2015-06-06 20:00:00
1
2
4
bbb

2015-06-06 19:00:00
2
3
4
cccc

2015-06-06 18:00:00
2
4
3
dddd

aでgroup byして、その中でbの値でソートして一番最後の行のstrの値を返す


sample1

select a,TD_LAST(str,b) as b_str

from test
group by a

a
b_str

1
bbb

2
dddd


sample2

select a, TD_FIRST(str,b) as b_str

from test
group by a

a
b_str

1
aaa

2
cccc


まとめ

とある列の最大値や最小値を探すならmax,minでよいのですが、とあるカラムで並べ替えて別のカラム値を得たい場合、いっぱいSQLを書かないといけない気がしますが、これらを使ったら簡単にかけて幸せですね。