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


はじめに

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

ドキュメント:Supported Hive UDFs

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

TD_TIME_ADD

以前、Treasure Dataで時間の範囲を指定するの大事!って記事を書きましたが、TD_TIME_RANGEを利用するときに1日分とか、1週間分とかTD_SCHEDULED_TIME()- 3600*24*7とか書くのダサい!見づらい!ということで、TD_TIME_ADDというのが用意されています。

Signature
long TD_TIME_ADD(int/long/string time,
                 string duration
                 [, string default_timezone = 'UTC'])

第一引数で指定した時間を第二引数で指定した期間分増減してくれます。

この関数の素晴らしいところは第一引数をunixtimeでも文字列(ig. "2013-01-01" or "2013-01-01 07:00:00")でも指定できることです。

第二引数に設定できる値です。

指定法 説明 使用例
Nd N日後 "1d":1日後,"2d": 2日後,"30d": 30日後
-Nd N日前 "-1d":1日前,"-2d": 2日前,"-30d": 30日前
Nh N時間後 "1h":1時間後,"2h": 2時間後,"48h": 48時間後
-Nh N時間前 "-1h":1時間前,"-2h": 2時間前,"-48h": 48時間前
Nm N分後 "1m":1分後,"2m": 2分後,"90m": 90分後
-Nm N分前 "-1m":1分前,"-2m": 2分前,"-90m": 90分前
Ns N秒後 "1s":1秒後,"2s": 2秒後,"90s": 90秒後
-Ns N秒前 "-1s":1秒前,"-2s": 2秒前,"-90s": 90秒前

長さが確定していないはサポートしていません。

第三引数はタイムゾーンを指定します。日本時間は"JST"と書きます。

"2013-01-01"から1日後までを指定。

SELECT ... WHERE TD_TIME_RANGE(time,
                               "2013-01-01",
                               TD_TIME_ADD("2013-01-01", "1d"),"JST")

TD_SCHEDULED_TIME()の1日前までを指定。

SELECT ... WHERE TD_TIME_RANGE(time,
                               TD_TIME_ADD(TD_SCHEDULED_TIME(), "-1d"),
                               TD_SCHEDULED_TIME(),"JST")

まとめ

これでTD_TIME_RANGEでの範囲指定がさらに楽になりますね!