Treasure Dataにはいくつかの独自関数が存在します。
ドキュメントは以下を参照ください。
https://tddocs.atlassian.net/wiki/spaces/PD/pages/1083429/Supported+Presto+and+TD+Functions
今回はtime関連の関数について紹介したいと思います。
■timeについて
Treasure DataはWebのトラッキングデータや商品購買履歴データ等の時系列データを扱いやすくするためにテーブルにtime列を自動で生成するようにできています。
また、time列が固定のインデックスとなっており一定の時間でパーティショニングされています。
time列の値は、Unixtimeとなっています。
Unixtimeとは1970年1月1日午前0時0分0秒(UTC)からの経過時間を秒単位で表した数値です
※UTCは協定世界時
■関数たち
TD_TIME_FORMAT()
Unixtimeを日付型へ変換する関数です。
Unixtimeのままでは、パッと見たときに日付を把握できないので、日付型へ変換することよく行います。
TD_TIME_FORMAT(1611021000, 'yyyy-MM-dd HH;mm:ss', 'JST')
結果:
2021-01-19 10:50:00
TD_TIME_PARSE()
日付型をUnixtimeへ変換する関数です。
今度は逆で、もともと持っていた日付型の列をUnixtimeに変換して処理で扱いやすくするなどの際に利用することがあります。
TD_TIME_PARSE('2021-01-19 10:50:00', 'JST')
結果:
1611021000
TD_TIME_ADD()
unixtimeに対して、時間の加算減算ができる関数です。
例えば、申請日からの有効期限を計算するなどの日付計算の際に便利です。
※年と月単位での計算はサポートしていません。
TD_TIME_FORMAT(TD_TIME_ADD(1611021000, '1d', 'JST'), 'yyyy-MM-dd HH;mm:ss', 'JST')
結果:
2021-01-20 10:50:00
TD_TIME_FORMAT(TD_TIME_ADD(1611021000, '-1d', 'JST'), 'yyyy-MM-dd HH;mm:ss', 'JST')
結果:
2021-01-18 10:50:00
wを指定すると、週を計算することも可能です。
TD_TIME_FORMAT(TD_TIME_ADD(1611021000, '1w', 'JST'), 'yyyy-MM-dd HH;mm:ss', 'JST')
結果:
2021-01-26 10:50:00
TD_TIME_RANGE()
WHERE句での条件指定の際に、Unixtimeの範囲を指定する関数です。
例えば、以下のように条件でSQLを実行すると2021-01-18 10:50:00から2021-01-26 10:50:00までのレコードが返されます。
WHEREE TD_TIME_RANGE(time, '2021-01-18 10:50:00', '2021-01-26 10:50:00','JST')
また、startもしくはendの日付をNULLとすると範囲限定しなくなるので、上限下限どちらかのみに使用することも可能です。
TD_SCHEDULED_TIME()
ジョブがスケジュールされた時間をUnixtimeで返す関数です。
以上、よく使うtime関連のTreasure Data独自関数のご紹介でした。
コメント