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

More than 1 year has passed since last update.

はじめに

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

ドキュメント:Supported Hive UDFs

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

TD_SCHEDULED_TIME

これはクエリ実行時の現在時刻のunixtimeを返す関数です。スケジュールクエリ実行時に使います。

ちなみにHiveにはunix_timestamp()という実行時のunixtimeを返してくれる関数があります。
だがしかし、unix_timestamp()は本当の現在時刻を返してしまいます!!

スケジュールしているのが09:00:00だったとしても、実際にクエリが流れるのは09:00:30だったりしますよね。同じ時間にたくさんのスケジュールクエリを設定していたり、重いJOBを実行していたりすると時間ずれます。また、スケジュールクエリにはDelayオプションという実際の実行開始時間をずらすオプションもあります。

そんなわけで、TD_SCHEDULED_TIME()はスケジュールされた正確な時間を返します。もし、スケジュールされていないクエリを実行した場合は実際の時間を返します。もちろんDelayオプションで開始時間をずらしてもスケジュールされている時間です。

まとめ

昨日との差分を計算したい。とかいうときは毎日同じ時間を条件に指定したいですよね。
そんなときはTD_SCHEDULED_TIME()を使いましょう!