

Amazon Timestream for LiveAnalytics와 유사한 기능을 원하는 경우 Amazon Timestream for InfluxDB를 고려해 보세요. 간소화된 데이터 수집과 실시간 분석을 위한 10밀리초 미만의 쿼리 응답 시간을 제공합니다. [여기](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)에서 자세히 알아보세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 고유한 차원 값
<a name="scheduledqueries-patterns-uniquedimvalues"></a>

차원의 고유 값을 변수로 사용하여 특정 데이터 조각에 해당하는 지표를 드릴다운하려는 대시보드가 있는 사용 사례가 있을 수 있습니다. 아래 스냅샷은 대시보드가 region, cell, silo, microservice, 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 값 또는 열을 계산해야 하는 차원을 식별해야 합니다.

이 예제에서는 대시보드가 region, cell, silo, availability\$1zone, 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
```

여기에 유의해야 할 몇 가지 중요한 사항이 있습니다.
+ 하나의 예약된 계산을 사용하여 여러 쿼리의 값을 사전 계산할 수 있습니다. 예를 들어 앞의 쿼리를 사용하여 5가지 변수의 값을 미리 계산합니다. 따라서 각 변수에 대해 하나씩 필요하지 않습니다. 이 동일한 패턴을 사용하여 여러 패널에서 공유 계산을 식별하여 유지 관리해야 하는 예약된 쿼리 수를 최적화할 수 있습니다.
+ 차원의 고유 값은 본질적으로 시계열 데이터가 아닙니다. 따라서 @scheduled\$1runtime을 사용하여 이를 시계열로 변환합니다. 이 데이터를 @scheduled\$1runtime 파라미터와 연결하면 특정 시점에 나타난 고유 값을 추적하여 시계열 데이터를 생성할 수도 있습니다.
+ 이전 예제에서는 지표 값이 추적되는 것을 볼 수 있습니다. 이 예제에서는 COUNT(\$1)를 사용합니다. 대시보드에 대해 추적하려는 경우 다른 의미 있는 집계를 계산할 수 있습니다.

다음은 이전 쿼리를 사용하여 예약된 계산에 대한 구성입니다. 이 예제에서는 예약 표현식 cron(0/15 \$1 \$1 \$1 ? \$1)을 사용하여 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\$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
```