DataPrime fonctions date / heure

Ce guide fournit un glossaire des fonctions disponibles sur IBM® Cloud Logs DataPrime pour le traitement des horodatages, des intervalles et d'autres constructions temporelles.

Unités de temps

De nombreuses fonctions de date et d'heure acceptent un argument d'unité de temps pour modifier leur comportement. DataPrime prend en charge des unités de temps allant de la nanoseconde au jour. Ils sont représentés par des chaînes littérales du nom de l'unité de temps en notation longue ou courte :

  • notation longue : day, hour, minute, second, milli, micro, nano

  • notation courte : d, h, m, s, ms, us, ns

Fuseaux horaires

DataPrime les horodatages sont toujours stockés dans le fuseau horaire UTC, mais certaines fonctions date/heure acceptent un argument de fuseau horaire pour modifier leur comportement. Les arguments relatifs au fuseau horaire sont des chaînes de caractères qui spécifient un décalage, une abréviation ou un identifiant de fuseau horaire :

  • décalage du fuseau horaire en heures (par exemple, "+01" ou "-02")
  • décalage du fuseau horaire en heures et minutes (par exemple, "+0130" ou "-0230")
  • décalage du fuseau horaire en heures et minutes avec séparateur (par exemple '+01:30' ou '-02:30')
  • abréviation du fuseau horaire (par exemple, "UTC", "GMT", "EST", etc.)
  • l'identifiant du fuseau horaire (par exemple, "Asie/Yerevan", "Europe/Zurich", "Amérique/Winnipeg", etc.)

addInterval

Additionne deux intervalles. Fonctionne également avec des intervalles négatifs. Équivalent à left + right.

addInterval(left: interval, right: interval): interval

addTime

Ajoute un intervalle à un horodatage. Fonctionne également avec des intervalles négatifs. Équivalent à t + i.

addTime(t: timestamp, i: interval): timestamp

diffTime

Calcule la durée entre deux horodatages. Positif si to > from, négatif si to < from. Équivalent à to - from.

diffTime(to: timestamp, from: timestamp): interval

extractTime

Extrait une date ou une unité de temps d'un horodatage. Renvoie un nombre à virgule flottante pour les unités de temps inférieures à une minute, sinon un nombre entier. Les unités de date telles que month ou week commencent à 1 (et non à 0).

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

Paramètres de la fonction :

  • timestamp (obligatoire)- l'horodatage à extraire.
  • unit (obligatoire)- la date ou l'unité de temps à extraire. Doit être une chaîne littérale et l'un des éléments suivants :
    • toute unité de temps en notation longue ou courte
    • une unité de date en notation longue : year, month, week, day_of_year, day_of_week
    • une unité de date en notation courte : Y, M, W, doy, dow
  • tz (optionnel)- un fuseau horaire pour convertir l'horodatage avant de l'extraire.

Exemple 1 : extraire l'heure à Tokyo

limit 1 | choose $m.timestamp.extractTime('h', 'Asia/Tokyo') as h # Result 1: 11pm { "h": 23 }

Exemple 2 : extraire le nombre de secondes

limit 1 | choose $m.timestamp.extractTime('second') as s # Result 2: 38.35 seconds { "s": 38.3510265 }

Exemple 3 : extraire le mois de l'horodatage

limit 1 | choose $m.timestamp.extractTime('month') as m # Result 3: August { "m": 8 }

Exemple 4 : extraire le jour de la semaine

limit 1 | choose $m.timestamp.extractTime('dow') as d # Result 4: Tuesday { "d": 2 }

formatInterval

Formate interval en une chaîne de caractères avec une unité de temps optionnelle scale.

formatInterval(interval: interval, scale: timeunit?): string

Paramètres de la fonction :

  • interval (obligatoire)- l'intervalle à formater.
  • scale (facultatif)- l'unité de temps maximale de l'intervalle à afficher. La valeur par défaut est nano.

Exemple :

limit 3 | choose formatInterval(now() - $m.timestamp, 's') as i # Results: { "i": "122s261ms466us27ns" } { "i": "122s359ms197us227ns" } { "i": "122s359ms197us227ns" }

formatTimestamp

Formate un horodatage en une chaîne de caractères avec une spécification de format optionnelle et un fuseau horaire de destination.

formatTimestamp(timestamp: timestamp, format: string?, tz: string?): string

Paramètres de la fonction :

  • timestamp (obligatoire)- l'horodatage à formater.
  • format (facultatif)- une spécification du format date/heure pour l'analyse des horodatages. La valeur par défaut est ' iso8601 '. Le format peut être n'importe quelle chaîne avec des formateurs de date et d'heure intégrés, ou l'un de plusieurs raccourcis. En voici quelques exemples :
    • '%Y-%m- %d ' - imprime uniquement la date, par exemple '2023-04-05'
    • '%H:%M:%S' - imprime uniquement l'heure, par exemple '16:07:33'
    • '%F %H:%M:%S' - imprime la date et l'heure, par exemple '2023-04-05 16:07:33'
    • ' iso8601 ' - imprime un horodatage au format ISO 8601, par exemple '2023-04-05T16:07:33.123Z'
    • 'timestamp_milli' - imprime un timestamp en millisecondes (13 chiffres), par exemple '1680710853123'

tz (facultatif)- le fuseau horaire de destination pour convertir l'horodatage avant le formatage.

Exemple 1 : imprimer un horodatage avec le format par défaut et le décalage +5h

limit 1 | choose $m.timestamp.formatTimestamp(tz='+05') as ts # Result 1: { "ts": "2023-08-29T19:08:37.405937400+0500" }

Exemple 2 : imprimer uniquement l'année et le mois

limit 1 | choose $m.timestamp.formatTimestamp('%Y-%m') as ym # Result 2: { "ym": "2023-08" }

Exemple 3 : imprimer uniquement les heures et les minutes

limit 1 | choose $m.timestamp.formatTimestamp('%H:%M') as hm # Result 3: { "hm": "14:11" }

Exemple 4 : imprimer un horodatage en millisecondes (13 chiffres)

limit 1 | choose $m.timestamp.formatTimestamp('timestamp_milli') as ms # Result 4: { "ms": "1693318678696" }

fromUnixTime

Convertit un nombre d'unités de temps spécifiques depuis l'époque UNIX en un horodatage (en UTC). L'époque UNIX commence le 1er janvier 1970 - les dates antérieures sont représentées par des nombres négatifs.

fromUnixTime(unixTime: number, timeUnit: timeunit?): timestamp

Paramètres de la fonction :

  • unixTime (obligatoire)- le nombre d'unités de temps à convertir. Peut être positif ou négatif et sera arrondi à un nombre entier inférieur.
  • timeUnit (facultatif)- les unités de temps à convertir. La valeur par défaut est "milli".

Exemple :

limit 1 | choose fromUnixTime(1658958157515, 'ms') as ts # Result: { "ts": 1658958157515000000 }

multiplyInterval

Multiplie un intervalle par un facteur numérique. Fonctionne aussi bien avec des nombres entiers qu'avec des nombres fractionnaires. Équivalent à i * factor.

multiplyInterval(i: interval, factor: number): interval

now

Renvoie l'heure actuelle au moment de l'exécution de la requête. Stabilité sur toutes les lignes et dans l'ensemble de la requête, même en cas d'utilisation répétée. Résolution en nanosecondes si le système d'exécution le prend en charge, sinon résolution en millisecondes.

now(): timestamp

Exemple :

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

Analyse un intervalle à partir d'une chaîne de caractères au format NdNhNmNsNmsNusNns où N est la quantité de chaque unité de temps. Retourne null si l'entrée ne correspond pas au format attendu :

  • Il se compose des éléments de l'unité de temps - un nombre entier non négatif suivi du nom court de l'unité de temps. Les unités de temps prises en charge sont les suivantes : 'd', 'h', 'm', 's', 'ms', 'us', 'ns'.
  • Il doit y avoir au moins un élément d'unité de temps.
  • La même unité de temps ne peut pas apparaître plus d'une fois.
  • Les composants doivent être décroissants dans l'ordre des unités de temps - des jours aux nanosecondes.
  • Il peut commencer par - pour représenter des intervalles négatifs.
parseInterval(string: string): interval

Exemple 1 : analyse d'un intervalle de zéro

limit 1 | choose '0s'.parseInterval() as i # Result 1: { "i": "0ns" }

Exemple 2 : analyser un intervalle positif

limit 1 | choose '1d48h0m'.parseInterval() as i # Result 2: { "i": "3d" }

Exemple 3 : analyse d'un intervalle négatif

limit 1 | choose '-5m45s'.parseInterval() as i # Result 3: { "i": "-5m45s" }

parseTimestamp

Analyse un horodatage à partir d'une chaîne de caractères avec une spécification de format optionnelle et une dérogation de fuseau horaire. Retourne null si l'entrée ne correspond pas au format attendu.

parseTimestamp(string: string, format: string?, tz: string?): timestamp

Paramètres de la fonction :

  • string (obligatoire)- l'entrée à partir de laquelle l'horodatage sera extrait.
  • format (facultatif)- une spécification du format date/heure pour l'analyse des horodatages. La valeur par défaut est "auto". Le format peut être n'importe quelle chaîne avec des extracteurs de date et d'heure intégrés, un raccourci parmi d'autres, ou une cascade de formats à essayer dans l'ordre. En voici quelques exemples :
    • '%Y-%m- %d ' - analyse uniquement la date, par exemple '2023-04-05'
    • '%F %H:%M:%S' - analyse la date et l'heure, par exemple '2023-04-05 16:07:33'
    • ' iso8601 ' - analyse un timestamp au format ISO 8601, par exemple '2023-04-05T16:07:33.123Z'
    • timestamp_milli" - analyse un timestamp en millisecondes (13 chiffres), par exemple "1680710853123"
    • '%m/ %d /%Y|timestamp_second' - analyse une date ou un timestamp en secondes, dans cet ordre
  • tz (optionnel)- un fuseau horaire pour convertir l'horodatage lors de l'analyse. Ce paramètre remplace tout fuseau horaire présent dans l'entrée. Un fuseau horaire peut être extrait de la chaîne en utilisant un format approprié et en omettant ce paramètre.

Exemple 1 : analyser une date avec le format par défaut

limit 1 | choose '2023-04-05'.parseTimestamp() as ts # Result 1: { "ts": 1680652800000000000 }

Exemple 2 : analyser une date au format US

limit 1 | choose '04/05/23'.parseTimestamp('%D') as ts # Result 2: { "ts": 1680652800000000000 }

Exemple 3 : analyser la date et l'heure avec les unités

limit 1 | choose '2023-04-05 16h07m'.parseTimestamp('%F %Hh%Mm') as ts # Result 3: { "ts": 1680710820000000000 }

Exemple 4 : analyser un timestamp en secondes (10 chiffres)

limit 1 | choose '1680710853'.parseTimestamp('timestamp_second') as ts # Result 4: { "ts": 1680710853000000000 }

roundInterval

Arrondit un intervalle à une unité de temps scale. Les unités de temps inférieures seront mises à zéro.

roundInterval(interval: interval, scale: timeunit): interval

Paramètres de la fonction :

  • interval (obligatoire)- l'intervalle à arrondir.
  • scale (obligatoire)- l'unité de temps maximale de l'intervalle à conserver.

Exemple :

limit 1 | choose 2h5m45s.roundInterval('m') as i # Result: { "i": "2h5m" }

roundTime

Arrondit un timestamp à l'intervalle donné. Utile pour le regroupement, par exemple en arrondissant à 1h pour les regroupements horaires. Équivalent à date / interval.

roundTime(date: timestamp, interval: interval): timestamp

Exemple :

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

Soustrait un intervalle d'un autre. Équivalent à addInterval(left, -right) et left - right.

subtractInterval(left: interval, right: interval): interval

subtractTime

Soustrait un intervalle d'un horodatage. Équivalent à addTime(t, -i) et t - i.

subtractTime(t: timestamp, i: interval): timestamp

toInterval

Convertit un nombre d'unités de temps spécifiques en un intervalle. Fonctionne avec des nombres entiers et des nombres à virgule flottante, positifs et négatifs.

toInterval(number: number, timeUnit: timeunit?): interval

Paramètres de la fonction :

  • number (obligatoire)- le nombre d'unités de temps à convertir.
  • timeUnit (facultatif)- Unités de temps à convertir. La valeur par défaut est nano.

Exemple 1 : convertir un nombre à virgule flottante

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

Convertit l'horodatage en un nombre d'unités de temps spécifiques depuis l'époque UNIX (en UTC). L'époque UNIX commence le 1er janvier 1970 - les dates antérieures sont représentées par des nombres négatifs.

toUnixTime(timestamp: timestamp, timeUnit: timeunit?): number

Paramètres de la fonction :

  • timestamp (obligatoire)- l'horodatage à convertir.
  • timeUnit (facultatif)- les unités de temps à convertir. La valeur par défaut est "milli".

Exemple :

limit 1 | choose $m.timestamp.toUnixTime('hour') as hr # Result: { "hr": 470363 }