スケジュールされたクエリのデータモデルマッピング - Amazon Timestream

Amazon Timestream for LiveAnalytics に類似した機能をご希望の場合は Amazon Timestream for InfluxDB をご検討ください。リアルタイム分析に適した、シンプルなデータインジェストと 1 桁ミリ秒のクエリ応答時間を特徴としています。詳細については、こちらを参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

スケジュールされたクエリのデータモデルマッピング

Timestream for LiveAnalytics は、テーブル内のデータの柔軟なモデリングをサポートしており、別の Timestream for LiveAnalytics テーブルにマテリアライズされたスケジュールされたクエリの結果も、同じように柔軟に処理できます。スケジュールされたクエリでは、マルチメジャーレコードと単一メジャーレコードのどちらにデータがあるかにかかわらず、任意のテーブルをクエリし、いずれかの種類のレコードを使用してクエリ結果を書き込むことができます。

スケジュールされたクエリの仕様で TargetConfiguration を使用して、クエリ結果を送信先派生テーブルの適切な列にマッピングします。以下のセクションでは、派生テーブルで異なるデータモデルを実現するためにこの TargetConfiguration を指定するさまざまな方法について説明します。具体的な内容は次のとおりです。

  • クエリ結果にメジャー名がなく、TargetConfiguration でターゲットメジャー名を指定した場合に、マルチメジャーレコードを書き込む方法。

  • クエリ結果でメジャー名を使用してマルチメジャーレコードを書き込む方法。

  • マルチメジャー属性が異なる複数のレコードを書き込むようにモデルを定義する方法。

  • 派生テーブルの単一メジャーレコードに書き込むようにモデルを定義する方法。

  • スケジュールされたクエリで単一メジャーレコードやマルチメジャーレコードをクエリし、結果を単一メジャーレコードまたはマルチメジャーレコードのいずれかにマテリアライズすることで、データモデルの柔軟性を選択できるようにする方法。

例: マルチメジャーレコードのターゲットメジャー名

この例では、クエリがマルチメジャーデータを含むテーブルからデータを読み取り、マルチメジャーレコードを使用して結果を別のテーブルに書き込んでいます。スケジュールされたクエリ結果には、自然なメジャー名の列がありません。ここでは、TargetConfiguration.TimestreamConfiguration の TargetMultiMeasureName プロパティを使用して、派生テーブルのメジャー名を指定します。

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

この例のマッピングでは、メジャー名 dashboard-metrics と属性名 avgMemCached、min_mem_free_1h、max_mem_used_1h、totalDiskWrites、avg_disk_used_1h、avg_disk_free_1h、CpuUserP100、min_cpu_idle_1h、CpuSystemP100 を含む 1 つのマルチメジャーレコードを作成します。TargetMultiMeasureAttributeName をオプションで使用して、クエリ出力列の名前を結果のマテリアライズに使用される別の属性名に変更できます。

以下は、このスケジュールされたクエリがマテリアライズされた後の送信先テーブルのスキーマです。次の結果の Timestream for LiveAnalytics 属性タイプからわかるように、メジャースキーマに示されているとおり、結果は単一メジャー名 dashboard-metrics を含むマルチメジャーレコードにマテリアライズされます。

タイプ Timestream for LiveAnalytics の属性タイプ

region

varchar

ディメンション

measure_name

varchar

MEASURE_NAME

時間

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

max_mem_used_1h

double

MULTI

min_mem_free_1h

double

MULTI

CpuUserP100

double

MULTI

以下は、SHOW MEASURES クエリで取得された対応するメジャーです。

measure_name data_type ディメンション

dashboard-metrics

multi

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

例: マルチメジャーレコードでスケジュールされたクエリからのメジャー名を使用する

この例は、単一メジャーレコードを含むテーブルから読み取り、結果をマルチメジャーレコードにマテリアライズするクエリを示しています。この場合、スケジュールされたクエリ結果には、スケジュールされたクエリの結果がマテリアライズされるターゲットテーブルのメジャー名として値を使用できる列があります。TargetConfiguration.TimestreamConfiguration の MeasureNameColumn プロパティを使用して、派生テーブルのマルチメジャーレコードのメジャー名を指定できます。

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

この例のマッピングは、属性 avg_1h、p0_1h、sum_1h、p100_1h を持つマルチメジャーレコードを作成し、クエリ結果の measure_name 列の値を送信先テーブルのマルチメジャーレコードのメジャー名として使用します。また、前の例では、必要に応じてマッピングのサブセットで TargetMultiMeasureAttributeName を使用して属性の名前を変更します。例えば、min_1h の名前が p0_1h に変更され、max_1h の名前が p100_1h に変更されました。

以下は、このスケジュールされたクエリがマテリアライズされた後の送信先テーブルのスキーマです。次の結果の Timestream for LiveAnalytics 属性タイプからわかるように、結果はマルチメジャーレコードにマテリアライズされます。メジャースキーマを見ると、クエリ結果に表示される値に対応する 9 つの異なるメジャー名が取り込まれていました。

Timestream for LiveAnalytics の属性タイプ

region

varchar

DIMENSION

measure_name

varchar

MEASURE_NAME

time

timestamp

TIMESTAMP

sum_1h

double

MULTI

p100_1h

double

MULTI

p0_1h

double

MULTI

avg_1h

double

MULTI

以下は、SHOW MEASURES クエリで取得された対応するメジャーです。

measure_name data_type ディメンション

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

例: 異なる属性を持つ異なるマルチメジャーレコードに結果をマッピングする

次の例は、クエリ結果の異なる列を、異なるメジャー名を含む複数のマルチメジャーレコードにマッピングする方法を示しています。次のスケジュールされたクエリ定義が表示される場合、クエリの結果には 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 はディメンション、hour は時間列にマッピングされます。

TargetConfiguration.TimestreamConfiguration の MixedMeasureMappings プロパティは、派生テーブルのマルチメジャーレコードにメジャーをマッピングする方法を指定します。

この例では、avg_mem_cached_1h、min_mem_free_1h、max_mem_used_1h がメジャー名 mem_aggregates を含む 1 つのマルチメジャーレコード、total_disk_io_writes_1h、avg_disk_used_1h、avg_disk_free_1h がメジャー名 disk_aggregates を含む別のマルチメジャーレコード、最後に max_cpu_user_1h、max_cpu_system_1h、min_cpu_system_1h がメジャー名 cpu_aggregates を含む別のマルチメジャーレコードで使用されます。

これらのマッピングでは、オプションで TargetMultiMeasureAttributeName を使用してクエリ結果列の名前を変更し、送信先テーブルに別の属性名を含めることもできます。例えば、結果列 avg_mem_cached_1h は avgMemCached、total_disk_io_writes_1h は totalIOWrites に名前が変更されます。

マルチメジャーレコードのマッピングを定義する場合、Timestream for LiveAnalytics はクエリ結果のすべての行を検査し、NULL 値を持つ列値を自動的に無視します。その結果、複数のメジャー名を含むマッピングでは、マッピングの当該グループの列値すべてが特定の行に対して NULL である場合、その行における当該メジャー名の値は取り込まれません。

例えば、次のマッピングでは、avg_mem_cached_1h、min_mem_free_1h、max_mem_used_1h がメジャー名 mem_aggregates にマッピングされます。クエリ結果の特定の行について、これらすべての列値が NULL の場合、Timestream for LiveAnalytics はその行のメジャー mem_aggregates を取り込みません。特定の行の列 9 つがすべて NULL の場合、エラーレポートでユーザーエラーが報告されます。

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

以下は、このスケジュールされたクエリがマテリアライズされた後の送信先テーブルのスキーマです。

Timestream for LiveAnalytics の属性タイプ

region

varchar

DIMENSION

measure_name

varchar

MEASURE_NAME

time

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

double

MULTI

以下は、SHOW MEASURES クエリで取得された対応するメジャーです。

measure_name data_type ディメンション

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

例: クエリ結果からメジャー名を含む単一メジャーレコードに結果をマッピングする

以下は、結果が単一メジャーレコードにマテリアライズされるスケジュールされたクエリの例です。この例では、クエリ結果に measure_name 列があり、その値はターゲットテーブルでメジャー名として使用されます。TargetConfiguration.TimestreamConfiguration の MixedMeasureMappings 属性を使用して、ターゲットテーブルのスカラーメジャーへのクエリ結果列のマッピングを指定します。

次の定義例では、クエリ結果が 9 つの異なる measure_name 値であると想定されます。マッピングでこれらすべてのメジャー名を一覧にし、当該メジャー名の単一メジャー値に使用する列を指定します。例えば、このマッピングでは、特定の結果行にメジャー名 memory_cached が表示される場合、データがターゲットテーブルに書き込まれると、avg_1h 列の値がメジャーの値として使用されます。オプションで TargetMeasureName を使用して、この値に新しいメジャー名を指定できます。

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

以下は、このスケジュールされたクエリがマテリアライズされた後の送信先テーブルのスキーマです。スキーマからわかるように、テーブルは単一メジャーレコードを使用しています。テーブルのメジャースキーマを一覧にすると、仕様で指定されたマッピングに基づいて書き込まれた 9 つのメジャーが表示されます。

Timestream for LiveAnalytics の属性タイプ

region

varchar

DIMENSION

measure_name

varchar

MEASURE_NAME

time

timestamp

TIMESTAMP

measure_value::double

double

MEASURE_VALUE

以下は、SHOW MEASURES クエリで取得された対応するメジャーです。

measure_name data_type ディメンション

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

例: クエリ結果列をメジャー名として単一メジャーレコードに結果をマッピングする

この例では、結果にメジャー名列がないクエリがあります。代わりに、出力を単一メジャーレコードにマッピングするときに、クエリ結果列の名前をメジャー名にします。前述の例では、類似する結果がマルチメジャーレコードに書き込まれました。この例は、アプリケーションシナリオに適している場合の、単一メジャーレコードへのマッピング方法を示しています。

ここでも、TargetConfiguration.TimestreamConfiguration の MixedMeasureMappings プロパティを使用してこのマッピングを指定します。次の例では、クエリ結果に 9 つの列があります。結果列をメジャー名、値を単一メジャー値として使用します。

例えば、クエリ結果の特定の行で、列名 avg_mem_cached_1h が列名および列に関連付けられた値として使用され、avg_mem_cached_1h が単一メジャーレコードのメジャー値として使用されます。TargetMeasureName を使用して、ターゲットテーブルで別のメジャー名を使用することもできます。例えば、列 sum_1h の値について、マッピングでターゲットテーブルのメジャー名として total_disk_io_writes_1h を使用するように指定します。いずれかの列の値が NULL の場合、対応するメジャーは無視されます。

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

以下は、このスケジュールされたクエリがマテリアライズされた後の送信先テーブルのスキーマです。ご覧のように、ターゲットテーブルには double 型の単一メジャー値を含むレコードが保存されています。同様に、テーブルのメジャースキーマには 9 つのメジャー名が表示されています。また、マッピングの名前が sum_1h から total_disk_io_writes_1h に変更されたため、メジャー名 total_disk_io_writes_1h が存在することに注意してください。

Timestream for LiveAnalytics の属性タイプ

region

varchar

DIMENSION

measure_name

varchar

MEASURE_NAME

time

timestamp

TIMESTAMP

measure_value::double

double

MEASURE_VALUE

以下は、SHOW MEASURES クエリで取得された対応するメジャーです。

measure_name data_type ディメンション

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