Mapeamentos de modelos de dados para consultas agendadas - Amazon Timestream

Para recursos semelhantes aos do Amazon Timestream para, considere o Amazon Timestream LiveAnalytics para InfluxDB. Ele oferece ingestão de dados simplificada e tempos de resposta de consulta de um dígito em milissegundos para análises em tempo real. Saiba mais aqui.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Mapeamentos de modelos de dados para consultas agendadas

O Timestream for LiveAnalytics oferece suporte à modelagem flexível de dados em suas tabelas e essa mesma flexibilidade se aplica aos resultados de consultas agendadas que são materializadas em outro Timestream para tabela. LiveAnalytics Com consultas agendadas, é possível examinar qualquer tabela, independentemente de ela conter dados em registros de várias medidas ou registros de medida única, e armazenar os resultados da consulta utilizando registros de várias medidas ou de medida única.

Você usa o TargetConfiguration na especificação de uma consulta agendada para mapear os resultados da consulta para as colunas apropriadas na tabela derivada de destino. As seções a seguir descrevem as diferentes maneiras de especificar isso TargetConfiguration para obter diferentes modelos de dados na tabela derivada. Especificamente, você verá:

  • Como gravar em registros de várias medidas quando o resultado da consulta não tem um nome de medida e você especifica o nome da medida de destino no TargetConfiguration.

  • Como você usa o nome da medida no resultado da consulta para gravar registros de várias medidas.

  • Como você pode estabelecer um modelo para gravar vários registros com diferentes atributos de várias medidas.

  • Como é possível definir um modelo para gravar em registros de medida única na tabela derivada.

  • Como você pode consultar registros de medida única registros de and/or várias medidas em uma consulta programada e ter os resultados materializados em um registro de medida única ou em um registro de várias medidas, o que permite escolher a flexibilidade dos modelos de dados.

Exemplo: nome da medida alvo para registros de diversas medidas

Neste exemplo, observa-se que a consulta está extraindo informações de uma tabela contendo diversas medições e registrando os resultados em outra tabela por meio da utilização de registros de diferentes medidas. O resultado da consulta agendada não tem uma coluna de nome de medida natural. Aqui, você especifica o nome da medida na tabela derivada usando a TargetMultiMeasureName propriedade no 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" } } }

O mapeamento neste exemplo cria um registro de várias medidas com nome de medida dashboard-metrics e nomes de atributos, min_mem_free_1h, max_mem_used_1h, avg_disk_used_1h avgMemCached, avg_disk_free_1h, P100, min_cpu_idle_1h, P100. totalDiskWrites CpuUser CpuSystem Observe o uso opcional de TargetMultiMeasureAttributeName renomear as colunas de saída da consulta para um nome de atributo diferente usado para materialização de resultados.

Veja a seguir o esquema da tabela de destino quando essa consulta agendada for materializada. Como você pode ver no Timestream do tipo de LiveAnalytics atributo no resultado a seguir, os resultados são materializados em um registro de várias medidas com um nome de medida únicadashboard-metrics, conforme mostrado no esquema de medidas.

Coluna Tipo Fluxo de tempo para o tipo de LiveAnalytics atributo

region

varchar

DIMENSÃO

measure_name

varchar

MEASURE_NAME

horário

timestamp

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

mem_max_used_1h

double

MULTI

min_mem_free_1h

double

MULTI

CpuUserP100

double

MULTI

A seguir estão as medidas correspondentes obtidas com uma consulta EXIBIR MEDIDAS

measure_name data_type Dimensões

dashboard-metrics

multi

[{'dimension_name': 'region', 'data_type': 'varchar'}]

Exemplo: uso do nome da medida da consulta agendada em registros de várias medidas

Neste exemplo, será apresentada uma consulta que realiza a leitura de uma tabela contendo registros de medida única, transformando os resultados em registros de múltiplas medidas. Nesse caso, o desfecho da consulta agendada apresenta uma coluna cujos valores podem ser empregados como designações de medidas na tabela de destino, na qual os resultados da consulta programada são concretizados. Em seguida, você pode especificar o nome da medida para o registro de várias medidas na tabela derivada usando a MeasureNameColumn propriedade em 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" } } }

Neste exemplo, o mapeamento gerará registros de diversas medidas com os atributos avg_1h, p0_1h, sum_1h, p100_1h. Além disso, utilizará os valores da coluna measure_name no resultado da consulta como o nome da medida para os registros na tabela de destino. Além disso, observe que os exemplos anteriores usam opcionalmente o TargetMultiMeasureAttributeName com um subconjunto dos mapeamentos para renomear os atributos. Por exemplo, min_1h foi renomeado para p0_1h e max_1h foi renomeado como p100_1h.

Veja a seguir o esquema da tabela de destino quando essa consulta agendada for materializada. Como você pode ver no Timestream do tipo de LiveAnalytics atributo no resultado a seguir, os resultados são materializados em um registro de várias medidas. Se você observar o esquema de medidas, nove nomes de medidas diferentes foram ingeridos e correspondem aos valores vistos nos resultados da consulta.

Coluna Tipo Fluxo de tempo para o tipo de LiveAnalytics atributo

region

varchar

DIMENSÃO

measure_name

varchar

MEASURE_NAME

horário

timestamp

TIMESTAMP

sum_1h

double

MULTI

p100_1h

double

MULTI

p0_1h

double

MULTI

avg_1h

double

MULTI

A seguir estão as medidas correspondentes obtidas com uma consulta EXIBIR MEDIDAS.

measure_name data_type Dimensões

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'}]

Exemplo: mapeamento de resultados para diferentes registros de várias medidas com atributos diferentes

O exemplo a seguir mostra como é possível mapear diferentes colunas no resultado da consulta em diferentes registros de várias medidas com nomes de medidas diferentes. Se você vir a seguinte definição de consulta agendada, o resultado da consulta tem as seguintes colunas: 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_1h usuário_1h, max_cpu_system_1h, min_cpu_system_1h. region é mapeado para a dimensão e hour é mapeado para a coluna de tempo.

A MixedMeasureMappings propriedade em TargetConfiguration. TimestreamConfigurationespecifica como mapear as medidas para registros de várias medidas na tabela derivada.

Neste exemplo específico, avg_mem_cached_1h, min_mem_free_1h, max_mem_used_1h são usados em um registro de várias medidas com nome de medida mem_aggregates, total_disk_io_writes_1h, avg_disk_used_1h, avg_disk_free_1h são usados em outro registro de várias medidas com medida nome de disk_aggregates e, por fim, max_cpu_user_1h, max_cpu_system_1h, min_cpu_system_1h são usados em outro registro de várias medidas com o nome de medida cpu_aggregates.

Nesses mapeamentos, você também pode usar opcionalmente TargetMultiMeasureAttributeName para renomear a coluna de resultados da consulta para ter um nome de atributo diferente na tabela de destino. Por exemplo, a coluna de resultados avg_mem_cached_1h é renomeada para, total_disk_io_writes_1h é renomeada para total, etc. avgMemCached IOWrites

Quando você define os mapeamentos para registros de várias medidas, o Timestream for LiveAnalytics inspeciona cada linha nos resultados da consulta e ignora automaticamente os valores da coluna que têm valores NULL. Como resultado, no caso de mapeamentos com vários nomes de medidas, se todos os valores da coluna desse grupo no mapeamento forem NULL para uma determinada linha, nenhum valor desse nome de medida será ingerido para essa linha.

Por exemplo, no mapeamento a seguir, avg_mem_cached_1h, min_mem_free_1h e max_mem_used_1h são mapeados para medir o nome mem_aggregates. Se, para uma determinada linha do resultado da consulta, todos esses valores da coluna forem NULL, o Timestream for LiveAnalytics não ingerirá a medida mem_aggregates dessa linha. Se todas as nove colunas de uma determinada linha forem NULL, você verá um erro do usuário relatado em seu relatório de erros.

{ "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" } } }

Veja a seguir o esquema da tabela de destino quando essa consulta agendada for materializada.

Coluna Tipo Fluxo de tempo para o tipo de LiveAnalytics atributo

region

varchar

DIMENSÃO

measure_name

varchar

MEASURE_NAME

horário

timestamp

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

total IOWrites

double

MULTI

A seguir estão as medidas correspondentes obtidas com uma consulta EXIBIR MEDIDAS

measure_name data_type Dimensões

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'}]

Exemplo: mapeamento de resultados para registros de medida única com o nome da medida dos resultados da consulta

Veja a seguir um exemplo de uma consulta agendada cujos resultados são materializados em registros de medida única. Neste caso, a consulta retorna uma coluna chamada measure_name, cujos valores servirão como nomes de medidas na tabela de destino. Você usa o MixedMeasureMappings atributo no TargetConfiguration. TimestreamConfiguration para especificar o mapeamento da coluna de resultados da consulta para a medida escalar na tabela de destino.

No exemplo de definição a seguir, espera-se que a consulta retorne nove valores únicos para measure_name. Você relaciona todos esses nomes de medida no mapeamento e especifica qual coluna usar para o valor de medida única desse nome de medida. Por exemplo, nesse mapeamento, se a medida memory_cached for identificada em uma linha específica de resultados, o valor presente na coluna avg_1h será utilizado como o valor da medida ao registrar os dados na tabela de destino. Opcionalmente, você pode usar TargetMeasureName para fornecer um novo nome de medida para esse 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" } } }

Veja a seguir o esquema da tabela de destino quando essa consulta agendada for materializada. Como é possível observar no esquema, a tabela está usando registros de medida única. Se você listar o esquema de medidas para a tabela, verá as nove medidas gravadas com base no mapeamento fornecido na especificação.

Coluna Tipo Fluxo de tempo para o tipo de LiveAnalytics atributo

region

varchar

DIMENSÃO

measure_name

varchar

MEASURE_NAME

horário

timestamp

TIMESTAMP

measure_value::double

double

MEASURE_VALUE

A seguir estão as medidas correspondentes obtidas com uma consulta EXIBIR MEDIDAS

measure_name data_type Dimensões

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'}]

Exemplo: mapeamento de resultados para registros de medida única com colunas de resultados de consulta como nomes de medidas

Neste exemplo, você tem uma consulta cujos resultados não têm uma coluna de nome de medida. Em vez disso, você deseja que o nome da coluna do resultado da consulta seja o nome da medida ao mapear a saída para registros de medida única. Anteriormente, houve um exemplo em que um resultado semelhante foi gravado em um registro de várias medidas. Neste exemplo, você verá como mapeá-lo para registros de medida única, se isso se adequar ao cenário do seu aplicativo.

Novamente, você especifica esse mapeamento usando a MixedMeasureMappings propriedade em TargetConfiguration. TimestreamConfiguration. No exemplo a seguir, você vê que o resultado da consulta tem nove colunas. Você usa as colunas de resultados como nomes de medidas e os valores como valores de medida única.

Por exemplo, para uma linha específica no resultado da consulta, o nome da coluna avg_mem_cached_1h é utilizado tanto como nome quanto como valor associado à coluna, e avg_mem_cached_1h é empregado como valor da medida para o registro de medida única. Você também pode usar TargetMeasureName para usar um nome de medida diferente na tabela de destino. Por exemplo, para valores na coluna sum_1h, o mapeamento determina que total_disk_io_writes_1h seja o nome da medida na tabela de destino. Se o valor de qualquer coluna for NULL, a medida correspondente será ignorada.

{ "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" } } }

Veja a seguir o esquema da tabela de destino quando essa consulta agendada for materializada. Como você pode ver, a tabela de destino está armazenando registros com valores de medida única do tipo double. Da mesma forma, o esquema de medidas da tabela mostra os nove nomes de medidas. Observe também que o nome da medida total_disk_io_writes_1h está incluído desde que o mapeamento foi renomeado de sum_1h para total_disk_io_writes_1h.

Coluna Tipo Fluxo de tempo para o tipo de LiveAnalytics atributo

region

varchar

DIMENSÃO

measure_name

varchar

MEASURE_NAME

horário

timestamp

TIMESTAMP

measure_value::double

double

MEASURE_VALUE

A seguir estão as medidas correspondentes obtidas com uma consulta EXIBIR MEDIDAS

measure_name data_type Dimensões

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'}]

mem_max_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'}]