DataPrime 日付/時刻機能
このガイドでは、タイムスタンプ、インターバル、その他の時間関連の構造体を処理するために利用可能な IBM® Cloud Logs DataPrime 関数の用語集を提供します。
時間単位
多くの日付/時刻関数は、その動作を変更するために時間単位の引数を受け付ける。 DataPrime はナノ秒から数日までの時間単位をサポートしている。 これらは、時間単位名のリテラル文字列として、長短どちらの表記でも表される:
-
長い表記:
dayhour,minute,second,milli,micro、nano -
短い表記:
dh,m,s,ms,us、ns
タイム・ゾーン
DataPrime タイムスタンプは常にUTCタイムゾーンで保存されますが、いくつかの日付/時刻関数は、その動作を変更するためにタイムゾーンの引数を受け付けます。 タイムゾーン引数は、タイムゾーンのオフセット、省略形、識別子を指定する文字列である:
- 時間単位のタイムゾーンオフセット (たとえば '+01' または '-02')
- 時分単位のタイムゾーンオフセット (たとえば '+0130' または '-0230')
- 時分単位のタイムゾーンオフセットと区切り文字 (例 '+01:30' または '-02:30')
- タイムゾーンの省略形 (例えば 'UTC'、'GMT'、'EST' など)
- タイムゾーン識別子 (例えば、'Asia/Yerevan'、'Europe/Zurich'、'America/Winnipeg' など)
addInterval
2つの音程を足し合わせる。 負のインターバルでも機能する。 left + right と同等。
addInterval(left: interval, right: interval): interval
addTime
タイムスタンプにインターバルを追加する。 負のインターバルでも機能する。 t + i と同等。
addTime(t: timestamp, i: interval): timestamp
diffTime
2つのタイムスタンプ間の継続時間を計算します。 to > from なら正、 to < from なら負。 to - from と同じ。
diffTime(to: timestamp, from: timestamp): interval
extractTime
タイムスタンプから日付または時間単位を抽出します。 時間単位が1分未満の場合は浮動小数点数を、それ以外の場合は整数を返します。 month 、 week のような日付単位は1から始まる(0からではない)。
extractTime(timestamp: timestamp, unit: dateunit | timeunit, tz: string?): number
関数仮パラメーター:
timestamp(必須)- 抽出するタイムスタンプ。unit(必須)- 抽出する日付または時間単位。 文字列リテラルで、以下のいずれかでなければならない:- 長短どちらの表記でも、任意の時間単位
- 長音符号による日付単位:
yearmonth,week,day_of_year、day_of_week - 日付単位の短縮表記:
YM,W,doy、dow
tz(オプション)- タイムスタンプを抽出する前に変換するタイムゾーン。
例1:東京で時間を抽出する
limit 1 | choose $m.timestamp.extractTime('h', 'Asia/Tokyo') as h # Result 1: 11pm { "h": 23 }
例2:秒数を抽出する
limit 1 | choose $m.timestamp.extractTime('second') as s # Result 2: 38.35 seconds { "s": 38.3510265 }
例3:タイムスタンプの月を取り出す
limit 1 | choose $m.timestamp.extractTime('month') as m # Result 3: August { "m": 8 }
例4:曜日を抽出する
limit 1 | choose $m.timestamp.extractTime('dow') as d # Result 4: Tuesday { "d": 2 }
formatInterval
interval を、オプションの時間単位 scale を持つ文字列にフォーマットする。
formatInterval(interval: interval, scale: timeunit?): string
関数仮パラメーター:
interval(必須)- フォーマットする間隔。scale(オプション)- 表示するインターバルの最大時間単位。 デフォルトはnano。
例:
limit 3 | choose formatInterval(now() - $m.timestamp, 's') as i # Results: { "i": "122s261ms466us27ns" } { "i": "122s359ms197us227ns" } { "i": "122s359ms197us227ns" }
formatTimestamp
タイムスタンプを、オプションのフォーマット指定と宛先タイムゾーンを持つ文字列にフォーマットする。
formatTimestamp(timestamp: timestamp, format: string?, tz: string?): string
関数仮パラメーター:
timestamp(必須)- フォーマットするタイムスタンプ。format(オプション)- タイムスタンプを解析するための日付/時刻フォーマットの指定。 デフォルトは「 iso8601 」。 書式は、日付/時刻フォーマッタを埋め込んだ文字列、またはいくつかの短縮形のいずれかにすることができる。 いくつかサンプルを紹介しよう:- '%Y-%m- %d ' - 日付のみを表示する。例:'2023-04-05'
- '%H:%M:%S' - 時刻だけを表示する、例えば '16:07:33' のように
- '%F %H:%M:%S' - 日付と時刻の両方を表示する
- ' iso8601 ' - ISO 8601 形式のタイムスタンプを表示する。 '2023-04-05T16:07:33.123Z'
- timestamp_milli' - タイムスタンプをミリ秒(13桁)で表示する
tz (オプション)- フォーマットする前にタイムスタンプを変換する宛先タイムゾーン。
例1:デフォルトの書式と +5h オフセットでタイムスタンプを表示する
limit 1 | choose $m.timestamp.formatTimestamp(tz='+05') as ts # Result 1: { "ts": "2023-08-29T19:08:37.405937400+0500" }
例2:年と月だけを印刷する
limit 1 | choose $m.timestamp.formatTimestamp('%Y-%m') as ym # Result 2: { "ym": "2023-08" }
例3:時間と分だけを印刷する
limit 1 | choose $m.timestamp.formatTimestamp('%H:%M') as hm # Result 3: { "hm": "14:11" }
例4:タイムスタンプをミリ秒(13桁)で表示する
limit 1 | choose $m.timestamp.formatTimestamp('timestamp_milli') as ms # Result 4: { "ms": "1693318678696" }
fromUnixTime
UNIXエポックからの特定の時間単位の数をタイムスタンプ(UTC)に変換する。 UNIXのエポックは1970年1月1日から始まり、それ以前のタイムスタンプは負の数で表される。
fromUnixTime(unixTime: number, timeUnit: timeunit?): timestamp
関数仮パラメーター:
unixTime(必須)- 変換する時間単位の量。 正または負のいずれかを指定し、整数に切り捨てられる。timeUnit(オプション)- 変換する時間単位。 デフォルトは「ミリ」。
例:
limit 1 | choose fromUnixTime(1658958157515, 'ms') as ts # Result: { "ts": 1658958157515000000 }
multiplyInterval
区間に数値を乗じる。 整数と分数の両方で動作します。 i * factor と同等。
multiplyInterval(i: interval, factor: number): interval
now
クエリ実行時の現在時刻を返します。 複数回使用した場合でも、すべての行とクエリ全体で安定している。 ランタイムがサポートしていればナノ秒分解能、そうでなければミリ秒分解能。
now(): timestamp
例:
limit 3 | choose now() as now, now() - $m.timestamp as since # Results: { "now": 1693312549105874700, "since": "14m954ms329us764ns" } { "now": 1693312549105874700, "since": "14m954ms329us764ns" } { "now": 1693312549105874700, "since": "14m960ms519us564ns" }
parseInterval
NdNhNmNsNmsNusNns。Nは各時間単位の量である。 入力が期待される書式と一致しない場合に null を返す:
- 時間単位は、非負の整数の後に短い時間単位名が続く。 サポートされている時間単位は以下の通り:d'、'h'、'm'、's'、'ms'、'us'、'ns'。
- 少なくとも1つの時間単位のコンポーネントがなければならない。
- 同じ時間単位を複数回登場させることはできない。
- 構成要素は、日単位からナノ秒単位まで、時間単位で減少しなければならない。
-、負の区間を表すことができる。
parseInterval(string: string): interval
例1:ゼロ区間の解析
limit 1 | choose '0s'.parseInterval() as i # Result 1: { "i": "0ns" }
例2:正の区間を解析する
limit 1 | choose '1d48h0m'.parseInterval() as i # Result 2: { "i": "3d" }
例 3: 負の区間を解析する
limit 1 | choose '-5m45s'.parseInterval() as i # Result 3: { "i": "-5m45s" }
parseTimestamp
オプションのフォーマット指定とタイムゾーンのオーバーライドを使用して、文字列からタイムスタンプを解析します。 入力が期待される書式と一致しない場合に null を返す。
parseTimestamp(string: string, format: string?, tz: string?): timestamp
関数仮パラメーター:
string(必須)- タイムスタンプを抽出する入力。format(オプション)- タイムスタンプを解析するための日付/時刻フォーマットの指定。 デフォルトは「auto」。 書式は、日付/時刻抽出器を埋め込んだ文字列、いくつかの短縮形のうちの1つ、または順番に試行される書式のカスケードである。 いくつかサンプルを紹介しよう:- '%Y-%m- %d ' - 日付のみをパースする
- '%F %H:%M:%S' - 日付と時刻を解析する
- ' iso8601 ' - ISO 8601 形式のタイムスタンプをパースします。 '2023-04-05T16:07:33.123Z'
- timestamp_milli' - タイムスタンプをミリ秒(13桁)でパースする
- '%m/ %d /%Y|timestamp_second' - 日付またはタイムスタンプを秒単位で解析する
tz(オプション)- パース時にタイムスタンプを変換するためのタイムゾーンオーバーライド。 このパラメータは、入力に存在するタイムゾーンを上書きする。 適切な書式を使い、このパラメーターを省略することで、文字列からタイムゾーンを抽出することができる。
例1:デフォルトの書式で日付を解析する
limit 1 | choose '2023-04-05'.parseTimestamp() as ts # Result 1: { "ts": 1680652800000000000 }
例2: USフォーマットの日付の解析
limit 1 | choose '04/05/23'.parseTimestamp('%D') as ts # Result 2: { "ts": 1680652800000000000 }
例3:日付と時刻を単位付きで解析する
limit 1 | choose '2023-04-05 16h07m'.parseTimestamp('%F %Hh%Mm') as ts # Result 3: { "ts": 1680710820000000000 }
例4:タイムスタンプを秒単位(10桁)で解析する
limit 1 | choose '1680710853'.parseTimestamp('timestamp_second') as ts # Result 4: { "ts": 1680710853000000000 }
roundInterval
区間を時間単位で丸める scale。 それ以下の時間単位はゼロとなる。
roundInterval(interval: interval, scale: timeunit): interval
関数仮パラメーター:
interval(必須)- 丸める間隔。scale(必須)- 保持するインターバルの最大時間単位。
例:
limit 1 | choose 2h5m45s.roundInterval('m') as i # Result: { "i": "2h5m" }
roundTime
タイムスタンプを指定された間隔で丸める。 例えば、1時間ごとのバケットを 1h、四捨五入するのに便利です。 date / interval と同等。
roundTime(date: timestamp, interval: interval): timestamp
例:
groupby $m.timestamp.roundTime(1h) as bucket count() as n # Results: { "bucket": "29/08/2023 15:00:00.000 pm", "n": 40653715 } { "bucket": "29/08/2023 14:00:00.000 pm", "n": 1779386 }
subtractInterval
ある区間から別の区間を引く。 addInterval(left, -right) および left - right と同等。
subtractInterval(left: interval, right: interval): interval
subtractTime
タイムスタンプからインターバルを引く。 addTime(t, -i) および t - i と同等。
subtractTime(t: timestamp, i: interval): timestamp
toInterval
Interval(インターバル):特定の時間単位の数をインターバルに変換します。 整数と浮動小数点、正の数と負の数の両方で動作します。
toInterval(number: number, timeUnit: timeunit?): interval
関数仮パラメーター:
number(必須)- 変換する時間単位の量。timeUnit(オプション)- 変換する時間単位。 デフォルトはnano。
例1:浮動小数点数を変換する
limit 1 | choose 2.5.toInterval('h') as i # Result 1: { "i": "2h30m" } # Example 2: convert an integer number limit 1 | choose -9000.toInterval() as i # Result 2: { "i": "-9us" }
toUnixTime
タイムスタンプをUNIXエポック(UTC)からの特定の時間単位の数に変換する。 UNIXのエポックは1970年1月1日から始まり、それ以前のタイムスタンプは負の数で表される。
toUnixTime(timestamp: timestamp, timeUnit: timeunit?): number
関数仮パラメーター:
timestamp(必須)- 変換するタイムスタンプ。timeUnit(オプション)- 変換する時間単位。 デフォルトは「ミリ」。
例:
limit 1 | choose $m.timestamp.toUnixTime('hour') as hr # Result: { "hr": 470363 }