DataPrime funzioni di data e ora
Questa guida fornisce un glossario delle funzioni IBM® Cloud Logs DataPrime disponibili per l'elaborazione di timestamp, intervalli e altri costrutti legati al tempo.
Unità di tempo
Molte funzioni di data/ora accettano un argomento relativo all'unità di tempo per modificare il loro comportamento. DataPrime supporta unità di tempo da nanosecondi a giorni. Sono rappresentati come stringhe letterali del nome dell'unità di tempo in notazione lunga o corta:
-
notazione lunga:
day,hour,minute,second,milli,micro,nano -
notazione breve:
d,h,m,s,ms,us,ns
Fusi orari
DataPrime i timestamp sono sempre memorizzati nel fuso orario UTC, ma alcune funzioni data/ora accettano un argomento relativo al fuso orario per modificare il loro comportamento. Gli argomenti dei fusi orari sono stringhe che specificano un offset, un'abbreviazione o un identificatore di fuso orario:
- sfasamento del fuso orario in ore (ad esempio, '+01' o '-02')
- offset del fuso orario in ore e minuti (ad esempio, '+0130' o '-0230')
- offset del fuso orario in ore e minuti con separatore (ad esempio '+01:30' o '-02:30')
- abbreviazione del fuso orario (ad esempio, "UTC", "GMT", "EST" e così via)
- identificatore del fuso orario (ad esempio, "Asia/Yerevan", "Europa/Zurigo", "America/Winnipeg" e così via)
addInterval
Aggiunge due intervalli tra loro. Funziona anche con intervalli negativi. Equivalente a left + right.
addInterval(left: interval, right: interval): interval
addTime
Aggiunge un intervallo a un timestamp. Funziona anche con intervalli negativi. Equivalente a t + i.
addTime(t: timestamp, i: interval): timestamp
diffTime
Calcola la durata tra due timestamp. Positivo se to > from, negativo se to < from. Equivale a to - from.
diffTime(to: timestamp, from: timestamp): interval
extractTime
Estrae una data o un'unità di tempo da un timestamp. Restituisce un numero in virgola mobile per unità di tempo inferiori al minuto, altrimenti un numero intero. Le unità di misura della data come month o week partono
da 1 (non da 0).
extractTime(timestamp: timestamp, unit: dateunit | timeunit, tz: string?): number
Parametri di funzione:
timestamp(obbligatorio)- il timestamp da cui estrarre.unit(obbligatorio)- la data o l'unità di tempo da estrarre. Deve essere un letterale di stringa e uno dei seguenti:- qualsiasi unità di tempo in notazione lunga o corta
- un'unità di data in notazione lunga:
year,month,week,day_of_year,day_of_week - un'unità di data in notazione breve:
Y,M,W,doy,dow
tz(facoltativo)- un fuso orario da convertire prima di estrarre il timestamp.
Esempio 1: estrarre l'ora a Tokyo
limit 1 | choose $m.timestamp.extractTime('h', 'Asia/Tokyo') as h # Result 1: 11pm { "h": 23 }
Esempio 2: estrarre il numero di secondi
limit 1 | choose $m.timestamp.extractTime('second') as s # Result 2: 38.35 seconds { "s": 38.3510265 }
Esempio 3: estrarre il mese del timestamp
limit 1 | choose $m.timestamp.extractTime('month') as m # Result 3: August { "m": 8 }
Esempio 4: estrarre il giorno della settimana
limit 1 | choose $m.timestamp.extractTime('dow') as d # Result 4: Tuesday { "d": 2 }
formatInterval
Formatta interval in una stringa con un'unità di tempo opzionale scale.
formatInterval(interval: interval, scale: timeunit?): string
Parametri di funzione:
interval(obbligatorio)- l'intervallo da formattare.scale(opzionale)- l'unità di tempo massima dell'intervallo da mostrare. L'impostazione predefinita è nano.
Esempio:
limit 3 | choose formatInterval(now() - $m.timestamp, 's') as i # Results: { "i": "122s261ms466us27ns" } { "i": "122s359ms197us227ns" } { "i": "122s359ms197us227ns" }
formatTimestamp
Formatta un timestamp in una stringa con una specifica di formato opzionale e un fuso orario di destinazione.
formatTimestamp(timestamp: timestamp, format: string?, tz: string?): string
Parametri di funzione:
timestamp(obbligatorio)- il timestamp da formattare.format(opzionale)- una specifica del formato data/ora per l'analisi dei timestamp. Il valore predefinito è ' iso8601 '. Il formato può essere una qualsiasi stringa con formattatori di data/ora incorporati o una delle varie abbreviazioni. Ecco alcuni esempi:- '%Y-%m- %d ' - stampa solo la data, ad esempio "2023-04-05"
- '%H:%M:%S' - stampa solo l'ora, ad esempio '16:07:33'
- '%F %H:%M:%S' - stampa sia la data che l'ora, ad esempio '2023-04-05 16:07:33'
- ' iso8601 ' - stampa un timestamp in formato ISO 8601, ad esempio '2023-04-05T16:07:33.123Z'
- timestamp_milli" - stampa un timestamp in millisecondi (13 cifre), ad esempio "1680710853123"
tz (opzionale)- il fuso orario di destinazione per convertire il timestamp prima della formattazione.
Esempio 1: stampare un timestamp con il formato predefinito e l'offset +5h
limit 1 | choose $m.timestamp.formatTimestamp(tz='+05') as ts # Result 1: { "ts": "2023-08-29T19:08:37.405937400+0500" }
Esempio 2: stampare solo l'anno e il mese
limit 1 | choose $m.timestamp.formatTimestamp('%Y-%m') as ym # Result 2: { "ym": "2023-08" }
Esempio 3: stampare solo le ore e i minuti
limit 1 | choose $m.timestamp.formatTimestamp('%H:%M') as hm # Result 3: { "hm": "14:11" }
Esempio 4: stampare un timestamp in millisecondi (13 cifre)
limit 1 | choose $m.timestamp.formatTimestamp('timestamp_milli') as ms # Result 4: { "ms": "1693318678696" }
fromUnixTime
Converte un numero di unità di tempo specifiche dall'epoca UNIX in un timestamp (in UTC). L'epoca UNIX inizia il 1° gennaio 1970; i timestamp precedenti sono rappresentati da numeri negativi.
fromUnixTime(unixTime: number, timeUnit: timeunit?): timestamp
Parametri di funzione:
unixTime(obbligatorio)- la quantità di unità di tempo da convertire. Può essere positivo o negativo e sarà arrotondato per difetto a un numero intero.timeUnit(opzionale)- le unità di tempo da convertire. Valore predefinito: "milli".
Esempio:
limit 1 | choose fromUnixTime(1658958157515, 'ms') as ts # Result: { "ts": 1658958157515000000 }
multiplyInterval
Moltiplica un intervallo per un fattore numerico. Funziona sia con i numeri interi che con quelli frazionari. Equivalente a i * factor.
multiplyInterval(i: interval, factor: number): interval
now
Restituisce l'ora corrente al momento dell'esecuzione della query. Stabile su tutte le righe e all'interno dell'intera query, anche se utilizzata più volte. Risoluzione in nanosecondi se il runtime la supporta, altrimenti risoluzione in millisecondi.
now(): timestamp
Esempio:
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
Analizza un intervallo da una stringa con il formato NdNhNmNsNmsNusNns dove N è la quantità di ogni unità di tempo. Restituisce null se l'input non corrisponde al formato previsto:
- Si tratta di componenti dell'unità di tempo - un numero intero non negativo seguito dal nome dell'unità di tempo breve. Le unità di tempo supportate sono: 'd', 'h', 'm', 's', 'ms', 'us', 'ns'.
- Deve essere presente almeno una componente di unità di tempo.
- La stessa unità temporale non può comparire più di una volta.
- I componenti devono essere decrescenti in ordine di unità di tempo, da giorni a nanosecondi.
- Può iniziare con
-per rappresentare intervalli negativi.
parseInterval(string: string): interval
Esempio 1: analizzare un intervallo zero
limit 1 | choose '0s'.parseInterval() as i # Result 1: { "i": "0ns" }
Esempio 2: analizzare un intervallo positivo
limit 1 | choose '1d48h0m'.parseInterval() as i # Result 2: { "i": "3d" }
Esempio 3: analizzare un intervallo negativo
limit 1 | choose '-5m45s'.parseInterval() as i # Result 3: { "i": "-5m45s" }
parseTimestamp
Analizza un timestamp da una stringa con una specifica di formato opzionale e un override del fuso orario. Restituisce null se l'input non corrisponde al formato previsto.
parseTimestamp(string: string, format: string?, tz: string?): timestamp
Parametri di funzione:
string(obbligatorio)- l'input da cui estrarre il timestamp.format(opzionale)- una specifica del formato data/ora per l'analisi dei timestamp. Per impostazione predefinita è "auto". Il formato può essere una qualsiasi stringa con estrattori di data/ora incorporati, uno dei vari stenografici o una cascata di formati da tentare in sequenza. Ecco alcuni esempi:- '%Y-%m- %d ' - analizza solo la data, ad esempio "2023-04-05"
- '%F %H:%M:%S' - analizza data e ora, ad esempio '2023-04-05 16:07:33'
- ' iso8601 ' - analizza un timestamp nel formato ISO 8601, ad esempio '2023-04-05T16:07:33.123Z'
- timestamp_milli" - analizza un timestamp in millisecondi (13 cifre), ad esempio "1680710853123"
- '%m/ %d /%Y|timestamp_second' - analizza una data o un timestamp in secondi, in quest'ordine
tz(facoltativo)- un fuso orario per convertire il timestamp durante l'analisi. Questo parametro sovrascrive qualsiasi fuso orario presente nell'ingresso. Un fuso orario può essere estratto dalla stringa utilizzando un formato appropriato e omettendo questo parametro.
Esempio 1: analizzare una data con il formato predefinito
limit 1 | choose '2023-04-05'.parseTimestamp() as ts # Result 1: { "ts": 1680652800000000000 }
Esempio 2: analizzare una data in formato USA
limit 1 | choose '04/05/23'.parseTimestamp('%D') as ts # Result 2: { "ts": 1680652800000000000 }
Esempio 3: analizzare data e ora con unità di misura
limit 1 | choose '2023-04-05 16h07m'.parseTimestamp('%F %Hh%Mm') as ts # Result 3: { "ts": 1680710820000000000 }
Esempio 4: analizzare un timestamp in secondi (10 cifre)
limit 1 | choose '1680710853'.parseTimestamp('timestamp_second') as ts # Result 4: { "ts": 1680710853000000000 }
roundInterval
Arrotonda un intervallo a un'unità di tempo scale. Le unità di tempo inferiori saranno azzerate.
roundInterval(interval: interval, scale: timeunit): interval
Parametri di funzione:
interval(obbligatorio)- l'intervallo da arrotondare.scale(obbligatorio)- l'unità di tempo massima dell'intervallo da mantenere.
Esempio:
limit 1 | choose 2h5m45s.roundInterval('m') as i # Result: { "i": "2h5m" }
roundTime
Arrotonda un timestamp all'intervallo dato. Utile per i bucket, ad esempio per arrotondare a 1h per i bucket orari. Equivalente a date / interval.
roundTime(date: timestamp, interval: interval): timestamp
Esempio:
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
Sottrae un intervallo da un altro. Equivalente a addInterval(left, -right) e left - right.
subtractInterval(left: interval, right: interval): interval
subtractTime
Sottrae un intervallo da un timestamp. Equivalente a addTime(t, -i) e t - i.
subtractTime(t: timestamp, i: interval): timestamp
toInterval
Converte un numero di unità di tempo specifiche in un intervallo. Funziona con numeri interi e in virgola mobile, positivi e negativi.
toInterval(number: number, timeUnit: timeunit?): interval
Parametri di funzione:
number(obbligatorio)- la quantità di unità di tempo da convertire.timeUnit(opzionale)- Unità di tempo da convertire. L'impostazione predefinita è nano.
Esempio 1: convertire un numero in virgola mobile
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
Converte il timestamp in un numero di unità di tempo specifiche dall'epoca UNIX (in UTC). L'epoca UNIX inizia il 1° gennaio 1970; i timestamp precedenti sono rappresentati da numeri negativi.
toUnixTime(timestamp: timestamp, timeUnit: timeunit?): number
Parametri di funzione:
timestamp(obbligatorio)- il timestamp da convertire.timeUnit(opzionale)- le unità di misura del tempo da convertire. Valore predefinito: "milli".
Esempio:
limit 1 | choose $m.timestamp.toUnixTime('hour') as hr # Result: { "hr": 470363 }