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


はじめに

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を書かないといけない気がしますが、これらを使ったら簡単にかけて幸せですね。