

Amazon Timestream for LiveAnalytics に類似した機能をご希望の場合は Amazon Timestream for InfluxDB をご検討ください。リアルタイム分析に適した、シンプルなデータインジェストと 1 桁ミリ秒のクエリ応答時間を特徴としています。詳細については、[こちら](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)を参照してください。

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

# 一意のディメンション値
<a name="scheduledqueries-patterns-uniquedimvalues"></a>

特定のデータスライスに対応するメトリクスをドリルダウンする変数として、ディメンションの一意の値を使用するダッシュボードがあるユースケースが考えられます。下のスナップショットは、region、cell、silo、microservice、availability\_zone といった複数のディメンションの一意の値がダッシュボードで事前入力される例です。これは、スケジュールされたクエリを使用して、追跡しているメトリクスからのこれら変数の一意値計算を大幅に高速化する方法の例です。

**Topics**
+ [未加工データ](#scheduledqueries-patterns-uniquedimvalues-onraw)
+ [一意のディメンション値の事前計算](#scheduledqueries-patterns-uniquedimvalues-precompute)
+ [派生テーブルからの変数の計算](#scheduledqueries-patterns-uniquedimvalues-fromderived)

## 未加工データ
<a name="scheduledqueries-patterns-uniquedimvalues-onraw"></a>

SELECT DISTINCT を使用して、データの一意値を計算できます。例えば、リージョンの一意値を取得する場合は、下の形式のクエリを使用できます。

```
SELECT DISTINCT region
FROM "raw_data"."devops"
WHERE time > ago(1h)
ORDER BY 1
```

場合によっては、数百万のデバイスや数十億の時系列を追跡していることもあります。ただしほとんどの場合、これらの興味深い変数のディメンションはカーディナリティが低く、値は数個～数十個です。未加工データから DISTINCT を計算するには、大量のデータをスキャンする必要があります。

## 一意のディメンション値の事前計算
<a name="scheduledqueries-patterns-uniquedimvalues-precompute"></a>

インタラクティブなダッシュボードを構築するため、これらの変数を高速でロードする必要があります。また、これらの変数はダッシュボードのロードのたびに頻繁に計算されるため、コスト効率を高める必要もあります。スケジュールされたクエリを使用し、派生テーブルでマテリアライズすることで、これらの変数の検索を最適化できます。

まず、DISTINCT 値を計算するときに述語で使用する DISTINCT 値または列の計算が必要なディメンションを特定する必要があります。

この例では、ダッシュボードで region、cell、silo、availability\_zone、microservice の各ディメンションの一意値が入力されます。そのため、以下のクエリを使用してこれらの一意の値を事前計算できます。

```
SELECT region, cell, silo, availability_zone, microservice_name, 
    min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints 
FROM raw_data.devops 
WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime 
GROUP BY region, cell, silo, availability_zone, microservice_name
```

ここで注意すべき重要なポイントがいくつかあります。
+ 1 つのスケジュールされた計算を使用して、多数の異なるクエリの値を事前計算できます。例えば、上のクエリは 5 つの異なる変数の値を事前計算するために使用します。したがって、クエリは変数ごとに必要ありません。この同じパターンを使用して、複数のパネル間で共有されている計算を特定し、維持する必要があるスケジュールされたクエリの数を最適化できます。
+ ディメンションの一意の値は、本質的に時系列データではありません。そのため、@scheduled\_runtime を使用してこれを時系列に変換します。このデータを @scheduled\_runtime パラメータに関連付けることで、特定の時点で表示される一意の値を追跡し、それに基づいて時系列データを作成することもできます。
+ 前の例では、メトリクス値が追跡されています。この例では COUNT(\*) が使用されています。ダッシュボード用に追跡する場合は、他の意味のある集計を計算できます。

以下は、前のクエリを使用するスケジュールされた計算の設定です。この例では、スケジュール式 cron(0/15 \* \* \* ? \*) を使用して 15 分ごとに更新するように設定されています。

```
{
    "Name": "PT15mHighCardPerUniqueDimensions",
    "QueryString": "SELECT region, cell, silo, availability_zone, microservice_name, min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime GROUP BY region, cell, silo, availability_zone, microservice_name",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/15 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "hc_unique_dimensions_pt15m",
            "TimeColumn": "time",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "cell",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "silo",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "availability_zone",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "count_multi",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "numDataPoints",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

## 派生テーブルからの変数の計算
<a name="scheduledqueries-patterns-uniquedimvalues-fromderived"></a>

スケジュールされた計算により、一意の値が派生テーブル hc\_unique\_dimensions\_pt15m に事前にマテリアライズされたら、派生テーブルを使用してディメンションの一意の値を効率的に計算できます。以下は、一意の値を計算する方法と、これらの一意値クエリで他の変数を述語として使用する方法を示すクエリの例です。

**リージョン**

```
SELECT DISTINCT region
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
ORDER BY 1
```

**セル**

```
SELECT DISTINCT cell
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
  AND region = '${region}'
ORDER BY 1
```

**サイロ**

```
SELECT DISTINCT silo
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
   AND region = '${region}' AND cell = '${cell}'
ORDER BY 1
```

**マイクロサービス**

```
SELECT DISTINCT microservice_name
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
   AND region = '${region}' AND cell = '${cell}'
ORDER BY 1
```

**アベイラビリティーゾーン**

```
SELECT DISTINCT availability_zone
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
   AND region = '${region}' AND cell = '${cell}' AND silo = '${silo}'
ORDER BY 1
```