

如需與 Amazon Timestream for LiveAnalytics 類似的功能，請考慮使用 Amazon Timestream for InfluxDB。它提供簡化的資料擷取和單一位數毫秒查詢回應時間，以進行即時分析。[在這裡](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)進一步了解。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 唯一維度值
<a name="scheduledqueries-patterns-uniquedimvalues"></a>

您可能有一個使用案例，其中有您要使用維度唯一值做為變數的儀表板，以深入了解對應於特定資料切片的指標。下面的快照是一個範例，其中儀表板會預先填入多個維度的唯一值，例如區域、儲存格、孤島、微服務和 availability\$1zone。在這裡，我們示範如何使用排程查詢，從您正在追蹤的指標大幅加速運算這些變數的不同值。

**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 值或資料欄所需的維度。

在此範例中，您可以看到儀表板正在填入維度區域、儲存格、孤島、 availability\$1zone 和微服務的不同值。因此，您可以使用以下查詢來預先計算這些唯一值。

```
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
```

這裡有幾個重要事項需要注意。
+ 您可以使用一個排程運算來預先計算許多不同查詢的值。例如，您使用上述查詢來預先計算五個不同變數的值。因此，您不需要每個變數各一個。您可以使用相同的模式來識別跨多個面板的共用運算，以最佳化您需要維護的排程查詢數量。
+ 維度的唯一值本質上不是時間序列資料。因此，您可以使用 @scheduled\$1runtime 將此值轉換為時間序列。透過將此資料與 @scheduled\$1runtime 參數建立關聯，您也可以追蹤在指定時間點出現的唯一值，進而從中建立時間序列資料。
+ 在先前的範例中，您會看到正在追蹤的指標值。此範例使用 COUNT(\$1)。如果您想要追蹤儀表板的其他有意義的彙總，您可以計算這些彙總。

以下是使用上一個查詢的排程運算組態。在此範例中，它設定為使用排程表達式 cron(0/15 \$1 \$1 ？每 15 分鐘重新整理一次 \$1)。

```
{
    "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\$1unique\$1dimensions\$1pt15m 中的唯一值，您可以使用衍生的資料表有效率地計算維度的唯一值。以下是如何計算唯一值，以及如何在這些唯一值查詢中使用其他變數做為述詞的範例查詢。

**區域**

```
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
```