DataPrime 日付/時刻機能

このガイドでは、タイムスタンプ、インターバル、その他の時間関連の構造体を処理するために利用可能な IBM® Cloud Logs DataPrime 関数の用語集を提供します。

時間単位

多くの日付/時刻関数は、その動作を変更するために時間単位の引数を受け付ける。 DataPrime はナノ秒から数日までの時間単位をサポートしている。 これらは、時間単位名のリテラル文字列として、長短どちらの表記でも表される:

  • 長い表記: day hour, minute, second, milli, micronano

  • 短い表記: d h, m, s, ms, usns

タイム・ゾーン

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分未満の場合は浮動小数点数を、それ以外の場合は整数を返します。 monthweek のような日付単位は1から始まる(0からではない)。

extractTime(timestamp: timestamp, unit: dateunit | timeunit, tz: string?): number

関数仮パラメーター:

  • timestamp (必須)- 抽出するタイムスタンプ。
  • unit (必須)- 抽出する日付または時間単位。 文字列リテラルで、以下のいずれかでなければならない:
    • 長短どちらの表記でも、任意の時間単位
    • 長音符号による日付単位: year month, week, day_of_yearday_of_week
    • 日付単位の短縮表記: Y M, W, doydow
  • 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 }