DataPrime funciones fecha / hora
Esta guía proporciona un glosario de las funciones disponibles en IBM® Cloud Logs DataPrime para procesar marcas de tiempo, intervalos y otras construcciones relacionadas con el tiempo.
Unidades de tiempo
Muchas funciones fecha/hora aceptan un argumento de unidad de tiempo para modificar su comportamiento. DataPrime admite unidades de tiempo desde nanosegundos hasta días. Se representan como cadenas literales del nombre de la unidad de tiempo en notación larga o corta:
-
notación larga:
day,hour,minute,second,milli,micro,nano -
notación abreviada:
d,h,m,s,ms,us,ns
Zonas horarias
DataPrime las marcas de tiempo se almacenan siempre en la zona horaria UTC, pero algunas funciones fecha/hora aceptan un argumento de zona horaria para modificar su comportamiento. Los argumentos de zona horaria son cadenas que especifican un desplazamiento, abreviatura o identificador de zona horaria:
- desfase horario en horas (por ejemplo, "+01" o "-02")
- desfase horario en horas y minutos (por ejemplo, "+0130" o "-0230")
- desfase horario en horas y minutos con separador (por ejemplo "+01:30" o "-02:30")
- abreviatura de zona horaria (por ejemplo, "UTC", "GMT", "EST", etc.)
- identificador de zona horaria (por ejemplo, "Asia/Yerevan", "Europe/Zurich", "America/Winnipeg", etc.)
addInterval
Suma dos intervalos. También funciona con intervalos negativos. Equivalente a left + right.
addInterval(left: interval, right: interval): interval
addTime
Añade un intervalo a una marca de tiempo. También funciona con intervalos negativos. Equivalente a t + i.
addTime(t: timestamp, i: interval): timestamp
diffTime
Calcula la duración entre dos marcas de tiempo. Positivo si to > from, negativo si to < from. Equivalente a to - from.
diffTime(to: timestamp, from: timestamp): interval
extractTime
Extrae una fecha o una unidad de tiempo de una marca de tiempo. Devuelve un número de coma flotante para unidades de tiempo inferiores a un minuto; en caso contrario, un número entero. Las unidades de fecha como month o week empiezan desde 1 (no desde 0).
extractTime(timestamp: timestamp, unit: dateunit | timeunit, tz: string?): number
Parámetro de la función:
timestamp(obligatorio)- la marca de tiempo de la que extraer.unit(obligatorio)- la unidad de fecha u hora a extraer. Debe ser un literal de cadena y uno de:- cualquier unidad de tiempo en notación larga o corta
- una unidad de fecha en notación larga:
year,month,week,day_of_year,day_of_week - una unidad de fecha en notación abreviada:
Y,M,W,doy,dow
tz(opcional)- una zona horaria para convertir la marca de tiempo antes de extraerla.
Ejemplo 1: extraer la hora en Tokio
limit 1 | choose $m.timestamp.extractTime('h', 'Asia/Tokyo') as h # Result 1: 11pm { "h": 23 }
Ejemplo 2: extraer el número de segundos
limit 1 | choose $m.timestamp.extractTime('second') as s # Result 2: 38.35 seconds { "s": 38.3510265 }
Ejemplo 3: extraer el mes de la marca de tiempo
limit 1 | choose $m.timestamp.extractTime('month') as m # Result 3: August { "m": 8 }
Ejemplo 4: extraer el día de la semana
limit 1 | choose $m.timestamp.extractTime('dow') as d # Result 4: Tuesday { "d": 2 }
formatInterval
Formatea interval a una cadena con una unidad de tiempo opcional scale.
formatInterval(interval: interval, scale: timeunit?): string
Parámetro de la función:
interval(requerido)- el intervalo a formatear.scale(opcional)- la unidad de tiempo máxima del intervalo a mostrar. Por defecto es nano.
Ejemplo:
limit 3 | choose formatInterval(now() - $m.timestamp, 's') as i # Results: { "i": "122s261ms466us27ns" } { "i": "122s359ms197us227ns" } { "i": "122s359ms197us227ns" }
formatTimestamp
Formatea una marca de tiempo en una cadena con una especificación de formato opcional y una zona horaria de destino.
formatTimestamp(timestamp: timestamp, format: string?, tz: string?): string
Parámetro de la función:
timestamp(obligatorio)- la marca de tiempo a formatear.format(opcional)- una especificación de formato de fecha/hora para analizar marcas de tiempo. Por defecto ' iso8601 '. El formato puede ser cualquier cadena con formateadores de fecha/hora incrustados, o una de varias abreviaturas. He aquí algunos ejemplos:- '%Y-%m- %d ' - imprime sólo la fecha, por ejemplo '2023-04-05'
- '%H:%M:%S' - imprime sólo la hora, por ejemplo '16:07:33'
- %F %H:%M:%S' - imprime tanto la fecha como la hora, por ejemplo '2023-04-05 16:07:33'
- ' iso8601 ' - imprime una marca de tiempo en formato ISO 8601, por ejemplo '2023-04-05T16:07:33.123Z'
- timestamp_milli' - imprime una marca de tiempo en milisegundos (13 dígitos), por ejemplo '1680710853123'
tz (opcional)- la zona horaria de destino para convertir la marca de tiempo antes de formatearla.
Ejemplo 1: imprimir una marca de tiempo con el formato predeterminado y el desplazamiento +5h
limit 1 | choose $m.timestamp.formatTimestamp(tz='+05') as ts # Result 1: { "ts": "2023-08-29T19:08:37.405937400+0500" }
Ejemplo 2: imprimir sólo el año y el mes
limit 1 | choose $m.timestamp.formatTimestamp('%Y-%m') as ym # Result 2: { "ym": "2023-08" }
Ejemplo 3: imprimir sólo las horas y los minutos
limit 1 | choose $m.timestamp.formatTimestamp('%H:%M') as hm # Result 3: { "hm": "14:11" }
Ejemplo 4: imprimir una marca de tiempo en milisegundos (13 dígitos)
limit 1 | choose $m.timestamp.formatTimestamp('timestamp_milli') as ms # Result 4: { "ms": "1693318678696" }
fromUnixTime
Convierte un número de unidades de tiempo específico desde la época UNIX a una marca de tiempo (en UTC). La época UNIX comienza el 1 de enero de 1970 - las marcas de tiempo anteriores se representan con números negativos.
fromUnixTime(unixTime: number, timeUnit: timeunit?): timestamp
Parámetro de la función:
unixTime(requerido)- la cantidad de unidades de tiempo a convertir. Puede ser positivo o negativo y se redondeará a un número entero.timeUnit(opcional)- las unidades de tiempo a convertir. Por defecto es 'milli'.
Ejemplo:
limit 1 | choose fromUnixTime(1658958157515, 'ms') as ts # Result: { "ts": 1658958157515000000 }
multiplyInterval
Multiplica un intervalo por un factor numérico. Funciona tanto con números enteros como fraccionarios. Equivalente a i * factor.
multiplyInterval(i: interval, factor: number): interval
now
Devuelve la hora actual en el momento de ejecución de la consulta. Estable en todas las filas y en toda la consulta, incluso cuando se utiliza varias veces. Resolución en nanosegundos si el tiempo de ejecución lo admite; en caso contrario, resolución en milisegundos.
now(): timestamp
Ejemplo:
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
Analiza un intervalo a partir de una cadena con formato NdNhNmNsNmsNusNns donde N es la cantidad de cada unidad de tiempo. Devuelve null cuando la entrada no coincide con el formato esperado:
- Consta de componentes de unidad de tiempo: un número entero no negativo seguido del nombre abreviado de la unidad de tiempo. Las unidades de tiempo admitidas son: 'd', 'h', 'm', 's', 'ms', 'us', 'ns'.
- Debe haber al menos un componente de unidad de tiempo.
- La misma unidad de tiempo no puede aparecer más de una vez.
- Los componentes deben ser decrecientes en orden de unidades de tiempo: de días a nanosegundos.
- Puede empezar por
-para representar intervalos negativos.
parseInterval(string: string): interval
Ejemplo 1: analizar un intervalo cero
limit 1 | choose '0s'.parseInterval() as i # Result 1: { "i": "0ns" }
Ejemplo 2: analizar un intervalo positivo
limit 1 | choose '1d48h0m'.parseInterval() as i # Result 2: { "i": "3d" }
Ejemplo 3: analizar un intervalo negativo
limit 1 | choose '-5m45s'.parseInterval() as i # Result 3: { "i": "-5m45s" }
parseTimestamp
Analiza una marca de tiempo a partir de una cadena con una especificación de formato opcional y un cambio de zona horaria. Devuelve null cuando la entrada no coincide con el formato esperado.
parseTimestamp(string: string, format: string?, tz: string?): timestamp
Parámetro de la función:
string(obligatorio)- la entrada de la que se extraerá la marca de tiempo.format(opcional)- una especificación de formato de fecha/hora para analizar marcas de tiempo. Por defecto es "auto". El formato puede ser cualquier cadena con extractores de fecha/hora incrustados, una de varias abreviaturas o una cascada de formatos que deben intentarse en secuencia. He aquí algunos ejemplos:- %Y-%m- %d ' - sólo analiza la fecha, por ejemplo "2023-04-05"
- %F %H:%M:%S' - analiza la fecha y la hora, por ejemplo "2023-04-05 16:07:33"
- ' iso8601 ' - analiza una marca de tiempo en formato ISO 8601, por ejemplo '2023-04-05T16:07:33.123Z'
- timestamp_milli' - analiza una marca de tiempo en milisegundos (13 dígitos), por ejemplo "1680710853123"
- %m/ %d /%Y|timestamp_second' - analiza una fecha o una marca de tiempo en segundos, en este orden
tz(opcional)- una zona horaria para convertir la fecha y hora durante el análisis. Este parámetro anulará cualquier zona horaria presente en la entrada. Se puede extraer una zona horaria de la cadena utilizando un formato adecuado y omitiendo este parámetro.
Ejemplo 1: analizar una fecha con el formato por defecto
limit 1 | choose '2023-04-05'.parseTimestamp() as ts # Result 1: { "ts": 1680652800000000000 }
Ejemplo 2: analizar una fecha en formato US
limit 1 | choose '04/05/23'.parseTimestamp('%D') as ts # Result 2: { "ts": 1680652800000000000 }
Ejemplo 3: analizar fecha y hora con unidades
limit 1 | choose '2023-04-05 16h07m'.parseTimestamp('%F %Hh%Mm') as ts # Result 3: { "ts": 1680710820000000000 }
Ejemplo 4: analizar una marca de tiempo en segundos (10 dígitos)
limit 1 | choose '1680710853'.parseTimestamp('timestamp_second') as ts # Result 4: { "ts": 1680710853000000000 }
roundInterval
Redondea un intervalo a una unidad de tiempo scale. Las unidades de tiempo inferiores se pondrán a cero.
roundInterval(interval: interval, scale: timeunit): interval
Parámetro de la función:
interval(obligatorio)- el intervalo a redondear.scale(requerido)- la unidad de tiempo máxima del intervalo a mantener.
Ejemplo:
limit 1 | choose 2h5m45s.roundInterval('m') as i # Result: { "i": "2h5m" }
roundTime
Redondea una marca de tiempo al intervalo dado. Útil para el bucketing, por ejemplo, redondeando a 1h para buckets horarios. Equivalente a date / interval.
roundTime(date: timestamp, interval: interval): timestamp
Ejemplo:
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
Resta un intervalo de otro. Equivalente a addInterval(left, -right) y left - right.
subtractInterval(left: interval, right: interval): interval
subtractTime
Resta un intervalo de una marca de tiempo. Equivalente a addTime(t, -i) y t - i.
subtractTime(t: timestamp, i: interval): timestamp
toInterval
Convierte un número de unidades de tiempo específicas en un intervalo. Funciona con números enteros y flotantes y con números positivos y negativos.
toInterval(number: number, timeUnit: timeunit?): interval
Parámetro de la función:
number(requerido)- la cantidad de unidades de tiempo a convertir.timeUnit(opcional)- Unidades de tiempo a convertir. Por defecto es nano.
Ejemplo 1: convertir un número en coma flotante
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
Convierte la marca de tiempo a un número de unidades de tiempo específicas desde la época UNIX (en UTC). La época UNIX comienza el 1 de enero de 1970 - las marcas de tiempo anteriores se representan con números negativos.
toUnixTime(timestamp: timestamp, timeUnit: timeunit?): number
Parámetro de la función:
timestamp(obligatorio)- la fecha y hora a convertir.timeUnit(opcional)- las unidades de tiempo a convertir. Por defecto es 'milli'.
Ejemplo:
limit 1 | choose $m.timestamp.toUnixTime('hour') as hr # Result: { "hr": 470363 }