LoginSignup
6
7

More than 3 years have passed since last update.

Treasure Data TD_TIME関数チートシート

Last updated at Posted at 2021-03-22

TD_TIME関数チートシート

Treasure DataのTD_TIME関数をまとめました。

TD_TIME_RANGE

戻り値:boolean

引数

引数 設定値
1 int/long time UNIXTIME
2 int/long/string start_time 文字列またはUNIXTIMEで指定可能
3 int/long/string end_time 文字列またはUNIXTIMEで指定可能
4(option) string default_timezone = 'UTC' タイムゾーン

第1引数timeがstart_time以下で、end_timeより古い場合(start_time <= time && time <end_time)にtrueを返します。
end_timeが省略されているかNULLの場合は、未来全て。 start_timeがNULLの場合、過去全てが対象となります。

SELECT文は省略
WHEREに指定する例
  TD_TIME_RANGE(time, '2021-01-01', '2021-01-02','JST')  --日付で期間指定
  TD_TIME_RANGE(time, '2021-01-01 JST')                  --日付以降指定
  TD_TIME_RANGE(time, NULL, '2021-01-01', 'JST')         --To指定 
  TD_TIME_RANGE(time, '2021-01-01', NULL, 'JST')         --From指定
  TD_TIME_RANGE(time, '2021-03-01 09:00:00','2021-03-22 18:00:00','JST')  --日時で期間指定
  TD_TIME_RANGE(time,1609426800,1617116400,'JST')  --期間指定 unix_timestampで指定

TD_SCHEDULED_TIME

戻り値:long(UNIXTIME)

引数:なし

TDのSaved Queryのスケジュール機能によって、ジョブがスケジュールされた日時を返します。実際のクエリ開始時間が遅れる可能性があるため、戻り値はNOW()とは異なる場合があります。
クエリがスケジュールされたクエリでない場合、ジョブが発行された時刻を返します。

SELECT TD_SCHEDULED_TIME() ---> スケジュールをcron(44 * * * *)で実行の場合、1616388240 (2021-03-22 13:44:00+0900)
SELECT TD_SCHEDULED_TIME() ---> スケジュールをhourlyで実行の場合、1616392800 (2021-03-22 15:00:00+0900)

Saved Queryにスケジュールが設定されていない場合、RUNをクリックするとダイアログボックスが表示され、TD_SCHEDULED_TIMEに設定する日時の登録を行うことになります。

TD_INTERVAL

戻り値:boolean

引数

引数 設定値
1 int/long time UNIXTIME
2 string interval
3(option) string default_timezone = 'UTC' タイムゾーン

TD_INTERVALは、相対的な時間範囲を計算するために使用されます。 (絶対的な時間範囲の指定は、TD_TIME_RANGEを使用します。)

SELECT文は省略、タイムゾーンはJST
WHERE 
TD_INTERVAL(time, '-30s','JST')  --クエリ実行から30秒前
TD_INTERVAL(time, '-15m','JST')  --クエリ実行から15分前
TD_INTERVAL(time, '-1h','JST')   --クエリ実行から1時間前
TD_INTERVAL(time, '-1w','JST')   --クエリ実行から1週間前
TD_INTERVAL(time, '-1M','JST')   --クエリ実行から1ヶ月前
TD_INTERVAL(time,'-7d','JST')    --クエリ実行から7日前
TD_INTERVAL(time, '-1h/now','JST') --今から1時間前
TD_INTERVAL(time, '-1h/0d','JST') --今日の初め(2020-03-22 0:00:00)から1時間前
D_INTERVAL(time, '-7d/2021-03-31','JST') --2021-03-31から7日前
TD_INTERVAL(time, '-10d/-1M','JST') --クエリ実行の1分前から10日前

TD_INTERVAL_RANGE

戻り値:ARRAY[(start time), (end time)]

引数

引数 設定値
1 string interval_string
2(option) string default_timezone = 'UTC' timezone タイムゾーン

TD_INTERVALの日時範囲を確認するために使用することができます。

例(2021-03-22(JST)にクエリ実行)

SELECT TD_INTERVAL_RANGE('-30s','JST') ---> List [ "2021-03-22 15:53:52+0900", "2021-03-22 15:54:22+0900" ]
SELECT TD_INTERVAL_RANGE('-15m','JST') ---> List [ "2021-03-22 15:42:00+0900", "2021-03-22 15:57:00+0900" ]  --クエリ実行から15分前
SELECT TD_INTERVAL_RANGE('-1h','JST')  ---> List [ "2021-03-22 14:00:00+0900", "2021-03-22 15:00:00+0900" ]  --クエリ実行から1時間前
SELECT TD_INTERVAL_RANGE('-1w','JST')  ---> List [ "2021-03-15 00:00:00+0900", "2021-03-22 00:00:00+0900" ]  --クエリ実行から1週間前
SELECT TD_INTERVAL_RANGE('-1M','JST')  ---> List [ "2021-02-01 00:00:00+0900", "2021-03-01 00:00:00+0900" ]  --クエリ実行から1ヶ月前
SELECT TD_INTERVAL_RANGE('-7d','JST')  ---> List [ "2021-03-15 00:00:00+0900", "2021-03-22 00:00:00+0900" ]   --クエリ実行から7日前
SELECT TD_INTERVAL_RANGE('-1h/now','JST') ---> List [ "2021-03-22 15:00:00+0900", "2021-03-22 16:05:19+0900" ] --今から1時間前
SELECT TD_INTERVAL_RANGE('-1h/0d','JST') ---> List [ "2021-03-21 23:00:00+0900", "2021-03-22 00:00:00+0900" ]  --今日の初め(2020-03-22 0:00:00)から1時間前
SELECT TD_INTERVAL_RANGE('-7d/2021-03-31','JST') ---> List [ "2021-03-24 00:00:00+0900", "2021-03-31 00:00:00+0900" ] --2021-03-31から7日前
SELECT TD_INTERVAL_RANGE('-10d/-1M','JST') ---> List [ "2021-01-22 00:00:00+0900", "2021-02-01 00:00:00+0900" ] --クエリ実行の1ヶ月前から10日前

TD_TIME_ADD

戻り値:long(UNIXTIME)

引数

引数 設定値
1 int/long/string time
2 string duration
3(option) string default_timezone = 'UTC' タイムゾーン

timeに設定した日時からdurationに設定した時間オフセットの日時をUNIXTIMEで返します。
パフォーマンスを考慮し、「年(y)」と「月(m)」は、サポートされていません。

SELECT TD_TIME_ADD('2021-03-22 09:00:00', '1s') ---> 1616403601 (2021-03-22 09:00:01+0000)
SELECT TD_TIME_ADD('2021-03-22 09:00:00', '-1s','JST') ---> 1616371199 (2021-03-22 08:59:59+0900)
SELECT TD_TIME_ADD('2021-03-22 09:00:00', '-1m','JST') ---> 1616371140 (2021-03-22 08:59:00+0900)
SELECT TD_TIME_ADD('2021-03-22 09:00:00', '-1h','JST') ---> 1616367600 (2021-03-22 08:00:00+0900)
SELECT TD_TIME_ADD('2021-03-22 09:00:00', '-1d','JST') ---> 1616284800 (2021-03-21 09:00:00+0900)
SELECT TD_TIME_ADD('2021-03-22 09:00:00', '-1w','JST') ---> 1615766400 (2021-03-15 09:00:00+0900)

TD_TIME_FORMAT

戻り値:string(日時の文字列)

引数

引数 設定値
1 long time
2 string format
3(option) string default_timezone = 'UTC' タイムゾーン

UNIXTIMEを指定した形式の日時の文字列に変換します。(使用可能な形式については、Supported Time Formats in TD_TIME_FORMAT UDFを参照ください。)

SELECT TD_TIME_FORMAT(1616371200, 'yyyy-MM-dd HH:mm:ss', 'JST') ---> 2021-03-22 09:00:00
SELECT TD_TIME_FORMAT(1616371200, 'yyyy-MM-dd HH:mm:ss z', 'JST') ---> 2021-03-22 09:00:00 GMT+09:00
SELECT TD_TIME_FORMAT(1616371200, 'yyyy-MM-dd HH:mm:ss.SSS', 'JST') ---> 2021-03-22 09:00:00.000

その他はSupported Time Formats in TD_TIME_FORMAT UDFをご参照ください。

TD_TIME_PARSE

戻り値:long(UNIXTIME)

引数

引数 設定値
1 string time 日時の文字列
2(option) string default_timezone = 'UTC' タイムゾーン

日時の文字列をUNIXタイムスタンプに変換します。

SELECT TD_TIME_PARSE('2021-03-22 09:00:00') ---> 1616403600
SELECT TD_TIME_PARSE('2021-03-22 09:00:00','JST') ---> 1616371200
SELECT TD_TIME_PARSE('2021-03-22') ---> 1616371200 (2021-03-22 00:00:00+0000)
SELECT TD_TIME_PARSE('2021-03-22','JST') ---> 1616338800 (2021-03-22 00:00:00+0900)

TD_TIME_STRING

戻り値:string(日時の文字列)

引数

引数 設定値
1 long time UNIXTIME
2 string format string ドキュメントを参照
3(option) string default_timezone = 'UTC' タイムゾーン

指定したUNIXTIMEを指定されたformat stringの文字列に変換します。

TD_TIME_STRING(1611657186,'s','JST') ---> 2021-01-26 19:33:06+0900
TD_TIME_STRING(1611657186,'s!','JST') --> 2021-01-26 19:33:06
TD_TIME_STRING(1611657186,'m','JST') ---> 22021-01-26 19:33:00+0900
TD_TIME_STRING(1611657186,'m!','JST') --> 2021-01-26 19:33

TD_DATE_TRUNC

戻り値:long(UNIXTIME)

引数

引数 設定値
1 string unit
2 long time UNIXTIME
3(option) string default_timezone = 'UTC' タイムゾーン

unitに指定した日時のレベルで、日時を切り捨てし、UNIXTIMEで返します。

SELECT TD_DATE_TRUNC('minute', 1616385696) #2021-03-22 04:01:36+0000 ---> 1616385660 (2021-03-22 04:01:00+0000) 分で切り捨て
SELECT TD_DATE_TRUNC('hour', 1616385696) #2021-03-22 04:01:36+0000 ---> 1616385600 (2021-03-22 04:00:00+0000) 時で切り捨て
SELECT TD_DATE_TRUNC('day', 1616385696) #2021-03-22 04:01:36+0000 ---> 1616371200 (2021-03-22 00:00:00+0000) 日で切り捨て
SELECT TD_DATE_TRUNC('week', 1616385696) #2021-03-22 04:01:36+0000 ---> 1616371200 (2021-03-22 00:00:00+0000) 週で切り捨て
SELECT TD_DATE_TRUNC('month', 1616385696) #2021-03-22 04:01:36+0000 ---> 1614556800 (2021-03-01 00:00:00+0000) 月で切り捨て
SELECT TD_DATE_TRUNC('quarter', 1616385696) #2021-03-22 04:01:36+0000 ---> 1609459200 (2021-01-01 00:00:00+0000) 四半期で切り捨て
SELECT TD_DATE_TRUNC('year', 1616385696) #2021-03-22 04:01:36+0000 ---> 1609459200 (2021-01-01 00:00:00+0000) 年で切り捨て
SELECT TD_DATE_TRUNC('minute', 1616385696,'JST') #2021-03-22 13:01:36+0900 ---> 1616385660 (2021-03-22 13:01:00+0900) 分で切り捨て、タイムゾーン指定

参考

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7