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 para 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 outra tabela do Timestream para 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 formas de especificar essa 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 na 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.

  • É possível consultar registros de medida única e/ou registros de várias medidas em uma consulta programada, obtendo resultados que podem ser materializados em um registro de medida única ou em um de várias medidas, o que possibilita a escolha flexível 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 propriedade TargetMultiMeasureName em 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 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 o uso opcional de TargetMultiMeasureAttributeName para 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 tipo de atributo Timestream para LiveAnalytics no resultado a seguir, os resultados são materializados em um registro de várias medidas com um nome de medida única dashboard-metrics, conforme mostrado no esquema de medidas.

Coluna Tipo Tipo de atributo do Timestream para LiveAnalytics

região

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

Usuário da CPU P100

double

MULTI

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

measure_name data_type Dimensões

dashboard-metrics

vários

[{'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 programada 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 propriedade MeasureNameColumn property 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 tipo de atributo Timestream para LiveAnalytics 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 Tipo de atributo do Timestream para LiveAnalytics

região

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

vários

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

cpu_system

vários

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

cpu_user

vários

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

disk_free

vários

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

disk_io_writes

vários

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

disk_used

vários

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

memory_cached

vários

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

memory_free

vários

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

memory_free

vários

[{'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 propriedade MixedMeasureMappings em TargetConfiguration.TimestreamConfiguration especifica 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 avgMemCached, total_disk_io_writes_1h é renomeada para totalIOWrites etc.

Quando você define os mapeamentos para registros de várias medidas, o Timestream para 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 para 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 Tipo de atributo do Timestream para LiveAnalytics

região

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

totalIOWrites

totalIOWrites

MULTI

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

measure_name data_type Dimensões

cpu_aggregates

vários

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

disk_aggregates

vários

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

mem_aggregates

vários

[{'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 programada 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 atributo MixedMeasureMappings em 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. Se desejar, 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 Tipo de atributo do Timestream para LiveAnalytics

região

varchar

DIMENSÃO

nome_medida

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 propriedade MixedMeasureMappings 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 Tipo de atributo do Timestream para LiveAnalytics

região

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