DataPrime datum/Uhrzeit-Funktionen
Dieser Leitfaden enthält ein Glossar der verfügbaren IBM® Cloud Logs DataPrime Funktionen zur Verarbeitung von Zeitstempeln, Intervallen und anderen zeitbezogenen Konstrukten.
Zeiteinheiten
Viele Datums-/Zeitfunktionen akzeptieren ein Argument für die Zeiteinheit, um ihr Verhalten zu ändern. DataPrime unterstützt Zeiteinheiten von Nanosekunden bis zu Tagen. Sie werden als literale Zeichenketten mit dem Namen der Zeiteinheit in langer oder kurzer Notation dargestellt:
-
lange Notation:
day,hour,minute,second,milli,micro,nano -
kurzschreibweise:
d,h,m,s,ms,us,ns
Zeitzonen
DataPrime zeitstempel werden immer in der UTC-Zeitzone gespeichert, aber einige Datum/Uhrzeit-Funktionen akzeptieren ein Zeitzonen-Argument, um ihr Verhalten zu ändern. Zeitzonenargumente sind Zeichenketten, die einen Zeitzonen-Offset, ein Kürzel oder einen Bezeichner angeben:
- zeitzonen-Offset in Stunden (zum Beispiel '+01' oder '-02')
- zeitzonen-Offset in Stunden und Minuten (z. B. '+0130' oder '-0230')
- zeitzonen-Offset in Stunden und Minuten mit Trennzeichen (zum Beispiel '+01:30' oder '-02:30')
- abkürzungen für Zeitzonen (z. B. 'UTC', 'GMT', 'EST' usw.)
- kennung der Zeitzone (z. B. "Asien/Eriwan", "Europa/Zürich", "Amerika/Winnipeg" usw.)
addInterval
Addiert zwei Intervalle zusammen. Funktioniert auch mit negativen Intervallen. Äquivalent zu left + right.
addInterval(left: interval, right: interval): interval
addTime
Fügt ein Intervall zu einem Zeitstempel hinzu. Funktioniert auch mit negativen Intervallen. Äquivalent zu t + i.
addTime(t: timestamp, i: interval): timestamp
diffTime
Berechnet die Dauer zwischen zwei Zeitstempeln. Positiv, wenn to > from, negativ, wenn to < from. Äquivalent zu to - from.
diffTime(to: timestamp, from: timestamp): interval
extractTime
Extrahiert entweder ein Datum oder eine Zeiteinheit aus einem Zeitstempel. Gibt eine Fließkommazahl für Zeiteinheiten unter einer Minute zurück, ansonsten eine ganze Zahl. Datumseinheiten wie month oder week beginnen
bei 1 (nicht bei 0).
extractTime(timestamp: timestamp, unit: dateunit | timeunit, tz: string?): number
Funktionsparameter:
timestamp(erforderlich)- der Zeitstempel, aus dem extrahiert werden soll.unit(erforderlich)- die zu extrahierende Datums- oder Zeiteinheit. Muss ein String-Literal und eines von sein:- jede Zeiteinheit in langer oder kurzer Schreibweise
- eine Datumseinheit in langer Schreibweise:
year,month,week,day_of_year,day_of_week - eine Datumseinheit in Kurzschreibweise:
Y,M,W,doy,dow
tz(optional)- eine Zeitzone, in die der Zeitstempel vor der Extraktion umgerechnet wird.
Beispiel 1: Extraktion der Stunde in Tokio
limit 1 | choose $m.timestamp.extractTime('h', 'Asia/Tokyo') as h # Result 1: 11pm { "h": 23 }
Beispiel 2: Extraktion der Anzahl der Sekunden
limit 1 | choose $m.timestamp.extractTime('second') as s # Result 2: 38.35 seconds { "s": 38.3510265 }
Beispiel 3: Extraktion des Monats des Zeitstempels
limit 1 | choose $m.timestamp.extractTime('month') as m # Result 3: August { "m": 8 }
Beispiel 4: Extraktion des Wochentags
limit 1 | choose $m.timestamp.extractTime('dow') as d # Result 4: Tuesday { "d": 2 }
formatInterval
Formatiert interval zu einer Zeichenkette mit einer optionalen Zeiteinheit scale.
formatInterval(interval: interval, scale: timeunit?): string
Funktionsparameter:
interval(erforderlich)- das zu formatierende Intervall.scale(optional)- die maximale Zeiteinheit des anzuzeigenden Intervalls. Die Standardeinstellung ist nano.
Beispiel:
limit 3 | choose formatInterval(now() - $m.timestamp, 's') as i # Results: { "i": "122s261ms466us27ns" } { "i": "122s359ms197us227ns" } { "i": "122s359ms197us227ns" }
formatTimestamp
Formatiert einen Zeitstempel in eine Zeichenkette mit einer optionalen Formatspezifikation und einer Zielzeitzone.
formatTimestamp(timestamp: timestamp, format: string?, tz: string?): string
Funktionsparameter:
timestamp(erforderlich)- der zu formatierende Zeitstempel.format(optional)- eine Datums-/Zeitformatspezifikation für das Parsen von Zeitstempeln. Der Standardwert ist ' iso8601 '. Das Format kann eine beliebige Zeichenkette mit eingebetteten Datums-/Zeitformaten oder eine von mehreren Kurzformen sein. Hier sind ein paar Beispiele:- %Y-%m- %d ' - nur das Datum ausgeben, zum Beispiel '2023-04-05'
- %H:%M:%S' - nur die Uhrzeit ausgeben, zum Beispiel '16:07:33'
- %F %H:%M:%S' - sowohl Datum als auch Uhrzeit ausgeben, zum Beispiel '2023-04-05 16:07:33'
- ' iso8601 ' - einen Zeitstempel im ISO 8601-Format ausgeben, zum Beispiel '2023-04-05T16:07:33.123Z'
- timestamp_milli' - gibt einen Zeitstempel in Millisekunden (13 Ziffern) aus, zum Beispiel '1680710853123'
tz (optional)- die Zielzeitzone, in die der Zeitstempel vor der Formatierung konvertiert werden soll.
Beispiel 1: Drucken eines Zeitstempels mit Standardformat und +5h Offset
limit 1 | choose $m.timestamp.formatTimestamp(tz='+05') as ts # Result 1: { "ts": "2023-08-29T19:08:37.405937400+0500" }
Beispiel 2: nur das Jahr und den Monat drucken
limit 1 | choose $m.timestamp.formatTimestamp('%Y-%m') as ym # Result 2: { "ym": "2023-08" }
Beispiel 3: nur die Stunden und Minuten drucken
limit 1 | choose $m.timestamp.formatTimestamp('%H:%M') as hm # Result 3: { "hm": "14:11" }
Beispiel 4: Drucken eines Zeitstempels in Millisekunden (13 Ziffern)
limit 1 | choose $m.timestamp.formatTimestamp('timestamp_milli') as ms # Result 4: { "ms": "1693318678696" }
fromUnixTime
Konvertiert eine bestimmte Anzahl von Zeiteinheiten seit der UNIX-Epoche in einen Zeitstempel (in UTC). Die UNIX-Epoche beginnt am 1. Januar 1970 - frühere Zeitstempel werden durch negative Zahlen dargestellt.
fromUnixTime(unixTime: number, timeUnit: timeunit?): timestamp
Funktionsparameter:
unixTime(erforderlich)- die Anzahl der zu konvertierenden Zeiteinheiten. Kann entweder positiv oder negativ sein und wird auf eine ganze Zahl abgerundet.timeUnit(optional)- die zu konvertierenden Zeiteinheiten. Der Standardwert ist 'Milli'.
Beispiel:
limit 1 | choose fromUnixTime(1658958157515, 'ms') as ts # Result: { "ts": 1658958157515000000 }
multiplyInterval
Multipliziert ein Intervall mit einem numerischen Faktor. Funktioniert sowohl mit ganzen Zahlen als auch mit Bruchzahlen. Äquivalent zu i * factor.
multiplyInterval(i: interval, factor: number): interval
now
Gibt die aktuelle Zeit zum Zeitpunkt der Abfrageausführung zurück. Stabil über alle Zeilen und innerhalb der gesamten Abfrage, auch bei mehrfacher Verwendung. Nanosekunden-Auflösung, wenn die Laufzeitumgebung dies unterstützt, ansonsten Millisekunden-Auflösung.
now(): timestamp
Beispiel:
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
Analysiert ein Intervall aus einer Zeichenkette mit dem Format NdNhNmNsNmsNusNns, wobei N die Anzahl der einzelnen Zeiteinheiten ist. Gibt null zurück, wenn die Eingabe nicht dem erwarteten Format entspricht:
- Sie besteht aus Zeiteinheits-Komponenten - einer nicht-negativen ganzen Zahl, gefolgt von der Bezeichnung der kurzen Zeiteinheit. Unterstützte Zeiteinheiten sind: 'd', 'h', 'm', 's', 'ms', 'us', 'ns'.
- Es muss mindestens eine Zeiteinheit enthalten sein.
- Die gleiche Zeiteinheit kann nicht mehrfach vorkommen.
- Die Komponenten müssen in der Reihenfolge der Zeiteinheiten abnehmen - von Tagen bis zu Nanosekunden.
- Sie kann mit
-beginnen, um negative Intervalle darzustellen.
parseInterval(string: string): interval
Beispiel 1: Parsen eines Null-Intervalls
limit 1 | choose '0s'.parseInterval() as i # Result 1: { "i": "0ns" }
Beispiel 2: Parsen eines positiven Intervalls
limit 1 | choose '1d48h0m'.parseInterval() as i # Result 2: { "i": "3d" }
Beispiel 3: Parsen eines negativen Intervalls
limit 1 | choose '-5m45s'.parseInterval() as i # Result 3: { "i": "-5m45s" }
parseTimestamp
Analysiert einen Zeitstempel aus einer Zeichenkette mit einer optionalen Formatspezifikation und Zeitzonenüberschreibung. Gibt null zurück, wenn die Eingabe nicht dem erwarteten Format entspricht.
parseTimestamp(string: string, format: string?, tz: string?): timestamp
Funktionsparameter:
string(erforderlich)- die Eingabe, aus der der Zeitstempel extrahiert werden soll.format(optional)- eine Datums-/Zeitformatspezifikation für das Parsen von Zeitstempeln. Der Standardwert ist "auto". Das Format kann eine beliebige Zeichenkette mit eingebetteten Datums- und Zeitextraktoren, eine von mehreren Abkürzungen oder eine Kaskade von Formaten sein, die nacheinander ausprobiert werden. Hier sind ein paar Beispiele:- %Y-%m- %d ' - nur das Datum analysieren, zum Beispiel '2023-04-05'
- %F %H:%M:%S' - parst Datum und Uhrzeit, zum Beispiel '2023-04-05 16:07:33'
- ' iso8601 ' - analysiert einen Zeitstempel im ISO 8601-Format, zum Beispiel '2023-04-05T16:07:33.123Z'
- timestamp_milli' - Parsen eines Zeitstempels in Millisekunden (13 Stellen), z. B. '1680710853123'
- %m/ %d /%Y|Zeitstempel_Sekunde' - parst entweder ein Datum oder einen Zeitstempel in Sekunden, in dieser Reihenfolge
tz(optional)- ein Zeitzonen-Override zur Konvertierung des Zeitstempels beim Parsen. Dieser Parameter überschreibt jede in der Eingabe vorhandene Zeitzone. Eine Zeitzone kann aus der Zeichenkette extrahiert werden, indem ein geeignetes Format verwendet und dieser Parameter weggelassen wird.
Beispiel 1: Parsen eines Datums mit dem Standardformat
limit 1 | choose '2023-04-05'.parseTimestamp() as ts # Result 1: { "ts": 1680652800000000000 }
Beispiel 2: Parsen eines Datums im US-Format
limit 1 | choose '04/05/23'.parseTimestamp('%D') as ts # Result 2: { "ts": 1680652800000000000 }
Beispiel 3: Parsen von Datum und Uhrzeit mit Einheiten
limit 1 | choose '2023-04-05 16h07m'.parseTimestamp('%F %Hh%Mm') as ts # Result 3: { "ts": 1680710820000000000 }
Beispiel 4: Parsen eines Zeitstempels in Sekunden (10 Ziffern)
limit 1 | choose '1680710853'.parseTimestamp('timestamp_second') as ts # Result 4: { "ts": 1680710853000000000 }
roundInterval
Rundet ein Intervall auf eine Zeiteinheit scale. Geringere Zeiteinheiten werden mit Null angerechnet.
roundInterval(interval: interval, scale: timeunit): interval
Funktionsparameter:
interval(erforderlich)- das zu rundende Intervall.scale(erforderlich)- die maximale Zeiteinheit des zu haltenden Intervalls.
Beispiel:
limit 1 | choose 2h5m45s.roundInterval('m') as i # Result: { "i": "2h5m" }
roundTime
Rundet einen Zeitstempel auf das angegebene Intervall. Nützlich für die Aufteilung in Gruppen, z. B. Rundung auf 1h für stündliche Gruppen. Äquivalent zu date / interval.
roundTime(date: timestamp, interval: interval): timestamp
Beispiel:
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
Subtrahiert ein Intervall von einem anderen. Gleichwertig mit addInterval(left, -right) und left - right.
subtractInterval(left: interval, right: interval): interval
subtractTime
Subtrahiert ein Intervall von einem Zeitstempel. Gleichwertig mit addTime(t, -i) und t - i.
subtractTime(t: timestamp, i: interval): timestamp
toInterval
Konvertiert eine Anzahl von bestimmten Zeiteinheiten in ein Intervall. Funktioniert sowohl mit Ganzzahl- als auch mit Gleitkommazahlen sowie mit positiven und negativen Zahlen.
toInterval(number: number, timeUnit: timeunit?): interval
Funktionsparameter:
number(erforderlich)- die Anzahl der zu konvertierenden Zeiteinheiten.timeUnit(optional)- Zu konvertierende Zeiteinheiten. Die Standardeinstellung ist nano.
Beispiel 1: Umrechnung einer Fließkommazahl
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
Konvertiert den Zeitstempel in eine bestimmte Anzahl von Zeiteinheiten seit der UNIX-Epoche (in UTC). Die UNIX-Epoche beginnt am 1. Januar 1970 - frühere Zeitstempel werden durch negative Zahlen dargestellt.
toUnixTime(timestamp: timestamp, timeUnit: timeunit?): number
Funktionsparameter:
timestamp(erforderlich)- der zu konvertierende Zeitstempel.timeUnit(optional)- die Zeiteinheiten, in die umgerechnet werden soll. Der Standardwert ist 'Milli'.
Beispiel:
limit 1 | choose $m.timestamp.toUnixTime('hour') as hr # Result: { "hr": 470363 }