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.
Asignaciones de modelos de datos para consultas programadas
Timestream para LiveAnalytics admite el modelado flexible de los datos de sus tablas, y esta misma flexibilidad se aplica a los resultados de las consultas programadas que se materializan en otra tabla de Timestream para LiveAnalytics. Con las consultas programadas, puede consultar cualquier tabla, ya sea que tenga datos en registros de medidas múltiples o de una sola medida, y escribir los resultados de la consulta utilizando estos tipos de registros.
Utilice TargetConfiguration en la especificación de una consulta programada para asignar los resultados de la consulta a las columnas correspondientes de la tabla derivada de destino. En las siguientes secciones se describen las distintas formas de especificar esta TargetConfiguration para lograr distintos modelos de datos en la tabla derivada. En concreto, verá lo siguiente:
-
Cómo escribir en registros de medidas múltiples cuando el resultado de la consulta no tiene un nombre de medida y se especifica el nombre de la medida objetivo en TargetConfiguration.
-
Cómo se usa el nombre de la medida en el resultado de la consulta para escribir registros de medidas múltiples.
-
Cómo se puede definir un modelo para escribir varios registros con diferentes atributos de medidas múltiples.
-
Cómo se puede definir un modelo para escribir en los registros de una sola medida de la tabla derivada.
-
Cómo se pueden consultar registros de una sola medida o registros de medidas múltiples en una consulta programada y hacer que los resultados se materialicen en un registro de una sola medida o en un registro de medidas múltiples, lo que le permite elegir la flexibilidad de los modelos de datos.
Ejemplo: nombre de la medida objetivo para los registros de medidas múltiples
En este ejemplo, verá que la consulta lee datos de una tabla con datos de múltiples medidas y escribe los resultados en otra tabla mediante registros de medidas múltiples. El resultado de la consulta programada no tiene una columna de nombre de medida natural. Aquí, se especifica el nombre de la medida en la tabla derivada mediante la propiedad TargetMultiMeasureName de TargetConfiguration.TimestreamConfiguration.
{ "Name" : "CustomMultiMeasureName", "QueryString" : "SELECT region, bin(time, 1h) as hour, AVG(memory_cached) as avg_mem_cached_1h, MIN(memory_free) as min_mem_free_1h, MAX(memory_used) as max_mem_used_1h, SUM(disk_io_writes) as sum_1h, AVG(disk_used) as avg_disk_used_1h, AVG(disk_free) as avg_disk_free_1h, MAX(cpu_user) as max_cpu_user_1h, MIN(cpu_idle) as min_cpu_idle_1h, MAX(cpu_system) as max_cpu_system_1h FROM raw_data.devops_multi WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name = 'metrics' GROUP BY region, bin(time, 1h)", "ScheduleConfiguration" : { "ScheduleExpression" : "cron(0 0/1 * * ? *)" }, "NotificationConfiguration" : { "SnsConfiguration" : { "TopicArn" : "******" } }, "ScheduledQueryExecutionRoleArn": "******", "TargetConfiguration": { "TimestreamConfiguration": { "DatabaseName" : "derived", "TableName" : "dashboard_metrics_1h_agg_1", "TimeColumn" : "hour", "DimensionMappings" : [ { "Name": "region", "DimensionValueType" : "VARCHAR" } ], "MultiMeasureMappings" : { "TargetMultiMeasureName": "dashboard-metrics", "MultiMeasureAttributeMappings" : [ { "SourceColumn" : "avg_mem_cached_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName" : "avgMemCached" }, { "SourceColumn" : "min_mem_free_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "max_mem_used_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "sum_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName" : "totalDiskWrites" }, { "SourceColumn" : "avg_disk_used_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "avg_disk_free_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "max_cpu_user_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName" : "CpuUserP100" }, { "SourceColumn" : "min_cpu_idle_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "max_cpu_system_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName" : "CpuSystemP100" } ] } } }, "ErrorReportConfiguration": { "S3Configuration" : { "BucketName" : "******", "ObjectKeyPrefix": "errors", "EncryptionOption": "SSE_S3" } } }
La asignación de este ejemplo crea un registro de medidas múltiples con el nombre de la medida dashboard-metrics y los nombres de atributo avgMemCached, min_mem_free_1h, max_mem_used_1h, totalDiskWrites, avg_disk_used_1h, avg_disk_free_1h, CpuUserP100, min_cpu_idle_1h, CpuSystemP100. Observe el uso opcional de TargetMultiMeasureAttributeName para cambiar el nombre de las columnas de salida de la consulta por un nombre de atributo diferente utilizado para la materialización de los resultados.
El siguiente es el esquema de la tabla de destino una vez que se materialice la consulta programada. Como puede ver en el tipo de atributo de Timestream para LiveAnalytics en el siguiente resultado, los resultados se materializan en un registro de medidas múltiples con un nombre de medida único, dashboard-metrics, como se muestra en el esquema de medidas.
| Columna | Tipo | Tipo de atributo de Timestream para LiveAnalytics |
|---|---|---|
|
región |
varchar |
DIMENSION |
|
measure_name |
varchar |
MEASURE_NAME |
|
tiempo |
marca de tiempo |
TIMESTAMP |
|
CpuSystemP100 |
double |
MULTI |
|
avgMemCached |
double |
MULTI |
|
min_cpu_idle_1h |
double |
MULTI |
|
avg_disk_free_1h |
double |
MULTI |
|
avg_disk_used_1h |
double |
MULTI |
|
totalDiskWrites |
double |
MULTI |
|
max_mem_used_1h |
double |
MULTI |
|
min_mem_free_1h |
double |
MULTI |
|
CpuUserP100 |
double |
MULTI |
Las siguientes son las medidas correspondientes obtenidas con una consulta SHOW MEASURES.
| measure_name | data_type | Dimensiones |
|---|---|---|
|
dashboard-metrics |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
Ejemplo: usar el nombre de una medida de una consulta programada en registros de medidas múltiples
En este ejemplo, verá una consulta que lee una tabla con registros de una sola medida y materializa los resultados en registros de medidas múltiples. En este caso, el resultado de la consulta programada tiene una columna cuyos valores se pueden usar como nombres de medidas en la tabla de destino en la que se materializan los resultados de la consulta programada. A continuación, puede especificar el nombre de la medida para el registro de medidas múltiples de la tabla derivada mediante la propiedad MeasureNameColumn de TargetConfiguration.TimestreamConfiguration.
{ "Name" : "UsingMeasureNameFromQueryResult", "QueryString" : "SELECT region, bin(time, 1h) as hour, measure_name, AVG(CASE WHEN measure_name IN ('memory_cached', 'disk_used', 'disk_free') THEN measure_value::double ELSE NULL END) as avg_1h, MIN(CASE WHEN measure_name IN ('memory_free', 'cpu_idle') THEN measure_value::double ELSE NULL END) as min_1h, SUM(CASE WHEN measure_name IN ('disk_io_writes') THEN measure_value::double ELSE NULL END) as sum_1h, MAX(CASE WHEN measure_name IN ('memory_used', 'cpu_user', 'cpu_system') THEN measure_value::double ELSE NULL END) as max_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_free', 'memory_used', 'memory_cached', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, measure_name, bin(time, 1h)", "ScheduleConfiguration" : { "ScheduleExpression" : "cron(0 0/1 * * ? *)" }, "NotificationConfiguration" : { "SnsConfiguration" : { "TopicArn" : "******" } }, "ScheduledQueryExecutionRoleArn": "******", "TargetConfiguration": { "TimestreamConfiguration": { "DatabaseName" : "derived", "TableName" : "dashboard_metrics_1h_agg_2", "TimeColumn" : "hour", "DimensionMappings" : [ { "Name": "region", "DimensionValueType" : "VARCHAR" } ], "MeasureNameColumn" : "measure_name", "MultiMeasureMappings" : { "MultiMeasureAttributeMappings" : [ { "SourceColumn" : "avg_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "min_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName": "p0_1h" }, { "SourceColumn" : "sum_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "max_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName": "p100_1h" } ] } } }, "ErrorReportConfiguration": { "S3Configuration" : { "BucketName" : "******", "ObjectKeyPrefix": "errors", "EncryptionOption": "SSE_S3" } } }
La asignación de este ejemplo creará registros de medidas múltiples con los atributos avg_1h, p0_1h, sum_1h, p100_1h y utilizará los valores de la columna measure_name del resultado de la consulta como nombre de medida para los registros de medidas múltiples de la tabla de destino. Además, tenga en cuenta que los ejemplos anteriores utilizan opcionalmente TargetMultiMeasureAttributeName con un subconjunto de las asignaciones para cambiar el nombre de los atributos. Por ejemplo, se cambió el nombre de min_1h a p0_1h y el de max_1h a p100_1h.
El siguiente es el esquema de la tabla de destino una vez que se materialice la consulta programada. Como puede ver en el tipo de atributo de Timestream para LiveAnalytics en el siguiente resultado, los resultados se materializan en un registro de medidas múltiples. Si observa el esquema de medidas, se ingirieron nueve nombres de medidas diferentes que corresponden a los valores que se muestran en los resultados de la consulta.
| Columna | Tipo | Tipo de atributo de Timestream para LiveAnalytics |
|---|---|---|
|
región |
varchar |
DIMENSION |
|
measure_name |
varchar |
MEASURE_NAME |
|
tiempo |
marca de tiempo |
TIMESTAMP |
|
sum_1h |
double |
MULTI |
|
p100_1h |
double |
MULTI |
|
p0_1h |
double |
MULTI |
|
avg_1h |
double |
MULTI |
Las siguientes son las medidas correspondientes obtenidas con una consulta SHOW MEASURES.
| measure_name | data_type | Dimensiones |
|---|---|---|
|
cpu_idle |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
cpu_system |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
cpu_user |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
disk_free |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
disk_io_writes |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
disk_used |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
memory_cached |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
memory_free |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
memory_free |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
Ejemplo: asignar los resultados a diferentes registros de medidas múltiples con diferentes atributos
En el siguiente ejemplo se muestra cómo puede asignar diferentes columnas del resultado de la consulta a diferentes registros de medidas múltiples con diferentes nombres de medidas. Si ve la siguiente definición de consulta programada, el resultado de la consulta tiene las siguientes columnas: region, hour, avg_mem_cached_1h, min_mem_free_1h, max_mem_used_1h, total_disk_io_writes_1h, avg_disk_used_1h, avg_disk_free_1h, max_cpu_user_1h, max_cpu_system_1h, min_cpu_system_1h. region se asigna a la dimensión y hour se asigna a la columna de tiempo.
La propiedad MixedMeasureMappings de TargetConfiguration.TimestreamConfiguration especifica cómo asignar las medidas a los registros de medidas múltiples de la tabla derivada.
En este ejemplo específico, avg_mem_cached_1h, min_mem_free_1h, max_mem_used_1h se utilizan en un registro de medidas múltiples con el nombre de medida de mem_aggregates; total_disk_io_writes_1h, avg_disk_used_1h, avg_disk_free_1h se utilizan en otro registro de medidas múltiples con el nombre de medida de disk_aggregates; y, finalmente, max_cpu_user_1h, max_cpu_system_1h, min_cpu_system_1h se utilizan en otro registro de medidas múltiples con el nombre de medida cpu_aggregates.
En estas asignaciones, también puede usar opcionalmente TargetMultiMeasureAttributeName para cambiar el nombre de la columna de resultados de la consulta y tener un nombre de atributo diferente en la tabla de destino. Por ejemplo, la columna de resultados avg_mem_cached_1h pasa a llamarse avgMemCached, total_disk_io_writes_1h pasa a llamarse totalIOWrites, etc.
Al definir las asignaciones para los registros de medidas múltiples, Timestream para LiveAnalytics inspecciona todas las filas de los resultados de la consulta e ignora automáticamente los valores de las columnas que son nulos. Como resultado, en el caso de las asignaciones con nombres de múltiples medidas, si todos los valores de columna de ese grupo de la asignación son NULOS en una fila determinada, no se ingerirá ningún valor para el nombre de esa medida en esa fila.
Por ejemplo, en la siguiente asignación, avg_mem_cached_1h, min_mem_free_1h y max_mem_used_1h se asignan al nombre de medida mem_aggregates. Si para una fila determinada del resultado de la consulta todos los valores de las columnas son NULOS, Timestream para LiveAnalytics no ingerirá la medida mem_aggregates de esa fila. Si las nueve columnas de una fila determinada son NULAS, aparecerá un error de usuario en el informe de errores.
{ "Name" : "AggsInDifferentMultiMeasureRecords", "QueryString" : "SELECT region, bin(time, 1h) as hour, AVG(CASE WHEN measure_name = 'memory_cached' THEN measure_value::double ELSE NULL END) as avg_mem_cached_1h, MIN(CASE WHEN measure_name = 'memory_free' THEN measure_value::double ELSE NULL END) as min_mem_free_1h, MAX(CASE WHEN measure_name = 'memory_used' THEN measure_value::double ELSE NULL END) as max_mem_used_1h, SUM(CASE WHEN measure_name = 'disk_io_writes' THEN measure_value::double ELSE NULL END) as total_disk_io_writes_1h, AVG(CASE WHEN measure_name = 'disk_used' THEN measure_value::double ELSE NULL END) as avg_disk_used_1h, AVG(CASE WHEN measure_name = 'disk_free' THEN measure_value::double ELSE NULL END) as avg_disk_free_1h, MAX(CASE WHEN measure_name = 'cpu_user' THEN measure_value::double ELSE NULL END) as max_cpu_user_1h, MAX(CASE WHEN measure_name = 'cpu_system' THEN measure_value::double ELSE NULL END) as max_cpu_system_1h, MIN(CASE WHEN measure_name = 'cpu_idle' THEN measure_value::double ELSE NULL END) as min_cpu_system_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_cached', 'memory_free', 'memory_used', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, bin(time, 1h)", "ScheduleConfiguration" : { "ScheduleExpression" : "cron(0 0/1 * * ? *)" }, "NotificationConfiguration" : { "SnsConfiguration" : { "TopicArn" : "******" } }, "ScheduledQueryExecutionRoleArn": "******", "TargetConfiguration": { "TimestreamConfiguration": { "DatabaseName" : "derived", "TableName" : "dashboard_metrics_1h_agg_3", "TimeColumn" : "hour", "DimensionMappings" : [ { "Name": "region", "DimensionValueType" : "VARCHAR" } ], "MixedMeasureMappings" : [ { "MeasureValueType" : "MULTI", "TargetMeasureName" : "mem_aggregates", "MultiMeasureAttributeMappings" : [ { "SourceColumn" : "avg_mem_cached_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName": "avgMemCached" }, { "SourceColumn" : "min_mem_free_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "max_mem_used_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName": "maxMemUsed" } ] }, { "MeasureValueType" : "MULTI", "TargetMeasureName" : "disk_aggregates", "MultiMeasureAttributeMappings" : [ { "SourceColumn" : "total_disk_io_writes_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName": "totalIOWrites" }, { "SourceColumn" : "avg_disk_used_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "avg_disk_free_1h", "MeasureValueType" : "DOUBLE" } ] }, { "MeasureValueType" : "MULTI", "TargetMeasureName" : "cpu_aggregates", "MultiMeasureAttributeMappings" : [ { "SourceColumn" : "max_cpu_user_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "max_cpu_system_1h", "MeasureValueType" : "DOUBLE" }, { "SourceColumn" : "min_cpu_idle_1h", "MeasureValueType" : "DOUBLE", "TargetMultiMeasureAttributeName": "minCpuIdle" } ] } ] } }, "ErrorReportConfiguration": { "S3Configuration" : { "BucketName" : "******", "ObjectKeyPrefix": "errors", "EncryptionOption": "SSE_S3" } } }
El siguiente es el esquema de la tabla de destino una vez que se materialice la consulta programada.
| Columna | Tipo | Tipo de atributo de Timestream para LiveAnalytics |
|---|---|---|
|
región |
varchar |
DIMENSION |
|
measure_name |
varchar |
MEASURE_NAME |
|
tiempo |
marca de tiempo |
TIMESTAMP |
|
minCpuIdle |
double |
MULTI |
|
max_cpu_system_1h |
double |
MULTI |
|
max_cpu_user_1h |
double |
MULTI |
|
avgMemCached |
double |
MULTI |
|
maxMemUsed |
double |
MULTI |
|
min_mem_free_1h |
double |
MULTI |
|
avg_disk_free_1h |
double |
MULTI |
|
avg_disk_used_1h |
double |
MULTI |
|
totalIOWrites |
double |
MULTI |
Las siguientes son las medidas correspondientes obtenidas con una consulta SHOW MEASURES.
| measure_name | data_type | Dimensiones |
|---|---|---|
|
cpu_aggregates |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
disk_aggregates |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
mem_aggregates |
multi |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
Ejemplo: mapear los resultados a registros de una sola medida con el nombre de medida a partir de los resultados de la consulta
El siguiente es un ejemplo de una consulta programada cuyos resultados se materializan en registros de una sola medida. En este ejemplo, el resultado de la consulta tiene la columna measure_name cuyos valores se utilizarán como nombres de medidas en la tabla de destino. Utilice el atributo MixedMeasureMappings en TargetConfiguration.TimestreamConfiguration para especificar la asignación de la columna de resultados de la consulta a la medida escalar de la tabla de destino.
En el siguiente ejemplo de definición, se espera que el resultado de la consulta tenga nueve valores de measure_name distintos. Debe enumerar todos estos nombres de medida en la asignación y especificar qué columna usar como valor de medida única para ese nombre de medida. Por ejemplo, en esta asignación, si se ve el nombre de medida memory_cached para una fila de resultados determinada, el valor de la columna avg_1h se usa como valor de la medida cuando los datos se escriben en la tabla de destino. Si lo desea, puede usar TargetMeasureName para proporcionar un nuevo nombre de medida para este valor.
{ "Name" : "UsingMeasureNameColumnForSingleMeasureMapping", "QueryString" : "SELECT region, bin(time, 1h) as hour, measure_name, AVG(CASE WHEN measure_name IN ('memory_cached', 'disk_used', 'disk_free') THEN measure_value::double ELSE NULL END) as avg_1h, MIN(CASE WHEN measure_name IN ('memory_free', 'cpu_idle') THEN measure_value::double ELSE NULL END) as min_1h, SUM(CASE WHEN measure_name IN ('disk_io_writes') THEN measure_value::double ELSE NULL END) as sum_1h, MAX(CASE WHEN measure_name IN ('memory_used', 'cpu_user', 'cpu_system') THEN measure_value::double ELSE NULL END) as max_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_free', 'memory_used', 'memory_cached', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, bin(time, 1h), measure_name", "ScheduleConfiguration" : { "ScheduleExpression" : "cron(0 0/1 * * ? *)" }, "NotificationConfiguration" : { "SnsConfiguration" : { "TopicArn" : "******" } }, "ScheduledQueryExecutionRoleArn": "******", "TargetConfiguration": { "TimestreamConfiguration": { "DatabaseName" : "derived", "TableName" : "dashboard_metrics_1h_agg_4", "TimeColumn" : "hour", "DimensionMappings" : [ { "Name": "region", "DimensionValueType" : "VARCHAR" } ], "MeasureNameColumn" : "measure_name", "MixedMeasureMappings" : [ { "MeasureName" : "memory_cached", "MeasureValueType" : "DOUBLE", "SourceColumn" : "avg_1h", "TargetMeasureName" : "AvgMemCached" }, { "MeasureName" : "disk_used", "MeasureValueType" : "DOUBLE", "SourceColumn" : "avg_1h" }, { "MeasureName" : "disk_free", "MeasureValueType" : "DOUBLE", "SourceColumn" : "avg_1h" }, { "MeasureName" : "memory_free", "MeasureValueType" : "DOUBLE", "SourceColumn" : "min_1h", "TargetMeasureName" : "MinMemFree" }, { "MeasureName" : "cpu_idle", "MeasureValueType" : "DOUBLE", "SourceColumn" : "min_1h" }, { "MeasureName" : "disk_io_writes", "MeasureValueType" : "DOUBLE", "SourceColumn" : "sum_1h", "TargetMeasureName" : "total-disk-io-writes" }, { "MeasureName" : "memory_used", "MeasureValueType" : "DOUBLE", "SourceColumn" : "max_1h", "TargetMeasureName" : "maxMemUsed" }, { "MeasureName" : "cpu_user", "MeasureValueType" : "DOUBLE", "SourceColumn" : "max_1h" }, { "MeasureName" : "cpu_system", "MeasureValueType" : "DOUBLE", "SourceColumn" : "max_1h" } ] } }, "ErrorReportConfiguration": { "S3Configuration" : { "BucketName" : "******", "ObjectKeyPrefix": "errors", "EncryptionOption": "SSE_S3" } } }
El siguiente es el esquema de la tabla de destino una vez que se materialice la consulta programada. Como puede ver en el esquema, la tabla utiliza registros de una sola medida. Si incluye el esquema de medidas de la tabla, verá las nueve medidas escritas en función de la asignación proporcionada en la especificación.
| Columna | Tipo | Tipo de atributo de Timestream para LiveAnalytics |
|---|---|---|
|
región |
varchar |
DIMENSION |
|
measure_name |
varchar |
MEASURE_NAME |
|
tiempo |
marca de tiempo |
TIMESTAMP |
|
measure_value::double |
double |
MEASURE_VALUE |
Las siguientes son las medidas correspondientes obtenidas con una consulta SHOW MEASURES.
| measure_name | data_type | Dimensiones |
|---|---|---|
|
AvgMemCached |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
MinMemFree |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
cpu_idle |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
cpu_system |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
cpu_user |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
disk_free |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
disk_used |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
maxMemUsed |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
total-disk-io-writes |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
Ejemplo: asignar los resultados a registros de una sola medida con columnas de resultados de consultas como nombres de medida
En este ejemplo, tiene una consulta cuyos resultados no tienen una columna de nombre de medida. En su lugar, se busca que el nombre de la columna de resultados de la consulta sea el nombre de la medida al asignar la salida a registros de una sola medida. Anteriormente, se mostró un ejemplo en el que se escribía un resultado similar en un registro de medidas múltiples. En este ejemplo, verá cómo asignarlo a registros de una sola medida si se ajusta al caso de su aplicación.
De nuevo, especifique esta asignación mediante la propiedad MixedMeasureMappings en TargetConfiguration.TimestreamConfiguration. En el siguiente ejemplo, verá que el resultado de la consulta tiene nueve columnas. Las columnas de resultados se utilizan como nombres de medida y los valores como valores de medida única.
Por ejemplo, para una fila determinada del resultado de la consulta, el nombre de columna avg_mem_cached_1h se usa como nombre y valor de la columna asociados a la columna, y avg_mem_cached_1h se usa como valor de medida para el registro de una sola medida. También puede utilizar TargetMeasureName para utilizar un nombre de medida diferente en la tabla de destino. Por ejemplo, para los valores de la columna sum_1h, la asignación especifica usar total_disk_io_writes_1h como nombre de la medida en la tabla de destino. Si el valor de alguna columna es NULO, se ignora la medida correspondiente.
{ "Name" : "SingleMeasureMappingWithoutMeasureNameColumnInQueryResult", "QueryString" : "SELECT region, bin(time, 1h) as hour, AVG(CASE WHEN measure_name = 'memory_cached' THEN measure_value::double ELSE NULL END) as avg_mem_cached_1h, AVG(CASE WHEN measure_name = 'disk_used' THEN measure_value::double ELSE NULL END) as avg_disk_used_1h, AVG(CASE WHEN measure_name = 'disk_free' THEN measure_value::double ELSE NULL END) as avg_disk_free_1h, MIN(CASE WHEN measure_name = 'memory_free' THEN measure_value::double ELSE NULL END) as min_mem_free_1h, MIN(CASE WHEN measure_name = 'cpu_idle' THEN measure_value::double ELSE NULL END) as min_cpu_idle_1h, SUM(CASE WHEN measure_name = 'disk_io_writes' THEN measure_value::double ELSE NULL END) as sum_1h, MAX(CASE WHEN measure_name = 'memory_used' THEN measure_value::double ELSE NULL END) as max_mem_used_1h, MAX(CASE WHEN measure_name = 'cpu_user' THEN measure_value::double ELSE NULL END) as max_cpu_user_1h, MAX(CASE WHEN measure_name = 'cpu_system' THEN measure_value::double ELSE NULL END) as max_cpu_system_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_free', 'memory_used', 'memory_cached', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, bin(time, 1h)", "ScheduleConfiguration" : { "ScheduleExpression" : "cron(0 0/1 * * ? *)" }, "NotificationConfiguration" : { "SnsConfiguration" : { "TopicArn" : "******" } }, "ScheduledQueryExecutionRoleArn": "******", "TargetConfiguration": { "TimestreamConfiguration": { "DatabaseName" : "derived", "TableName" : "dashboard_metrics_1h_agg_5", "TimeColumn" : "hour", "DimensionMappings" : [ { "Name": "region", "DimensionValueType" : "VARCHAR" } ], "MixedMeasureMappings" : [ { "MeasureValueType" : "DOUBLE", "SourceColumn" : "avg_mem_cached_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "avg_disk_used_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "avg_disk_free_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "min_mem_free_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "min_cpu_idle_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "sum_1h", "TargetMeasureName" : "total_disk_io_writes_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "max_mem_used_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "max_cpu_user_1h" }, { "MeasureValueType" : "DOUBLE", "SourceColumn" : "max_cpu_system_1h" } ] } }, "ErrorReportConfiguration": { "S3Configuration" : { "BucketName" : "******", "ObjectKeyPrefix": "errors", "EncryptionOption": "SSE_S3" } } }
El siguiente es el esquema de la tabla de destino una vez que se materialice la consulta programada. Como puede ver, la tabla de destino almacena registros con valores de medida única de tipo doble. Del mismo modo, en el esquema de medidas de la tabla se muestran los nombres de las nueve medidas. Observe también que el nombre de medida total_disk_io_writes_1h está presente ya que la asignación cambió el nombre de sum_1h a total_disk_io_writes_1h.
| Columna | Tipo | Tipo de atributo de Timestream para LiveAnalytics |
|---|---|---|
|
región |
varchar |
DIMENSION |
|
measure_name |
varchar |
MEASURE_NAME |
|
tiempo |
marca de tiempo |
TIMESTAMP |
|
measure_value::double |
double |
MEASURE_VALUE |
Las siguientes son las medidas correspondientes obtenidas con una consulta SHOW MEASURES.
| measure_name | data_type | Dimensiones |
|---|---|---|
|
avg_disk_free_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
avg_disk_used_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
avg_mem_cached_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
max_cpu_system_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
max_cpu_user_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
max_mem_used_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
min_cpu_idle_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
min_mem_free_1h |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |
|
total-disk-io-writes |
double |
[{'dimension_name': 'region', 'data_type': 'varchar'}] |