Vistas de serie temporal - Amazon Timestream

Para obtener capacidades similares a las de Amazon Timestream, considere Amazon Timestream LiveAnalytics para InfluxDB. Ofrece una ingesta de datos simplificada y tiempos de respuesta a las consultas en milisegundos de un solo dígito para realizar análisis en tiempo real. Obtenga más información aquí.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Vistas de serie temporal

Timestream for LiveAnalytics admite las siguientes funciones para transformar los datos en el tipo de datos: timeseries

CREATE_TIME_SERIES

CREATE_TIME_SERIES es una función de agregación que toma todas las medidas sin procesar de una serie temporal (valores de tiempo y medida) y devuelve un tipo de datos de serie temporal. La sintaxis de esta función es la siguiente:

CREATE_TIME_SERIES(time, measure_value::<data_type>)

donde <data_type> es el tipo de datos del valor de la medida y puede ser bigint, boolean, double o varchar. El segundo parámetro no puede ser nulo.

Tenga en cuenta el uso de la CPU de EC2 las instancias almacenadas en una tabla denominada métricas, como se muestra a continuación:

Time region az vpc instance_id measure_name measure_value::double

2019-12-04 19:00:00.000000000

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef0

cpu_utilization

35,0

2019-12-04 19:00:01.000000000

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef0

cpu_utilization

38,2

2019-12-04 19:00:02.000000000

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef0

cpu_utilization

45,3

2019-12-04 19:00:00.000000000

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef1

cpu_utilization

54,1

2019-12-04 19:00:01.000000000

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef1

cpu_utilization

42,5

2019-12-04 19:00:02.000000000

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef1

cpu_utilization

3.7

Ejecución de la consulta:

SELECT region, az, vpc, instance_id, CREATE_TIME_SERIES(time, measure_value::double) as cpu_utilization FROM metrics WHERE measure_name=’cpu_utilization’ GROUP BY region, az, vpc, instance_id

devolverá todas las series que tengan un valor de medida cpu_utilization. En este caso, tenemos dos series:

region az vpc instance_id cpu_utilization

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef0

[{time: 2019-12-04 19:00:00.000000000, measure_value::double: 35,0}, {time: 2019-12-04 19:00:01.000000000, measure_value::double: 38,2}, {time: 2019-12-04 19:00:02.000000000, measure_value::double: 45,3}]

us-east-1

us-east-1d

vpc-1a2b3c4d

i-1234567890abcdef1

[{time: 2019-12-04 19:00:00.000000000, measure_value::double: 35,1}, {time: 2019-12-04 19:00:01.000000000, measure_value::double: 38,5}, {time: 2019-12-04 19:00:02.000000000, measure_value::double: 45,7}]

UNNEST

UNNEST es una función de tabla que permite transformar los datos de timeseries en un modelo plano. La sintaxis es la siguiente:

UNNEST transforma a timeseries en dos columnas, a saber, time y value. También puede usar alias con UNNEST, como se muestra a continuación:

UNNEST(timeseries) AS <alias_name> (time_alias, value_alias)

donde <alias_name> es el alias de la tabla plana, time_alias es el alias de la columna time y value_alias es el alias de la columna value.

Por ejemplo, considere el escenario en el que algunas de las EC2 instancias de su flota están configuradas para emitir métricas en un intervalo de 5 segundos, otras emiten métricas en un intervalo de 15 segundos y necesita el promedio de las métricas de todas las instancias con una granularidad de 10 segundos durante las últimas 6 horas. Para obtener estos datos, debe transformar las métricas al modelo de serie temporal mediante CREATE_TIME_SERIES. A continuación, puede usar INTERPOLATE_LINEAR para obtener los valores faltantes con una granularidad de 10 segundos. Luego, vuelva a transformar los datos en el modelo plano con UNNEST y, a continuación, use AVG para obtener las métricas medias de todas las instancias.

WITH interpolated_timeseries AS ( SELECT region, az, vpc, instance_id, INTERPOLATE_LINEAR( CREATE_TIME_SERIES(time, measure_value::double), SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization FROM timestreamdb.metrics WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h) GROUP BY region, az, vpc, instance_id ) SELECT region, az, vpc, instance_id, avg(t.cpu_util) FROM interpolated_timeseries CROSS JOIN UNNEST(interpolated_cpu_utilization) AS t (time, cpu_util) GROUP BY region, az, vpc, instance_id

La consulta anterior demuestra el uso de UNNEST con un alias. A continuación, se muestra un ejemplo de la misma consulta sin usar un alias para UNNEST:

WITH interpolated_timeseries AS ( SELECT region, az, vpc, instance_id, INTERPOLATE_LINEAR( CREATE_TIME_SERIES(time, measure_value::double), SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization FROM timestreamdb.metrics WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h) GROUP BY region, az, vpc, instance_id ) SELECT region, az, vpc, instance_id, avg(value) FROM interpolated_timeseries CROSS JOIN UNNEST(interpolated_cpu_utilization) GROUP BY region, az, vpc, instance_id