고유한 차원 값 - Amazon Timestream

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

고유한 차원 값

차원의 고유 값을 변수로 사용하여 특정 데이터 조각에 해당하는 지표를 드릴다운하려는 대시보드가 있는 사용 사례가 있을 수 있습니다. 아래 스냅샷은 대시보드가 리전, 셀, 사일로, 마이크로서비스, availability_zone과 같은 여러 차원의 고유한 값을 미리 채우는 예제입니다. 여기서는 예약된 쿼리를 사용하여 추적 중인 지표에서 이러한 변수의 고유한 값을 계산하는 속도를 크게 높이는 방법의 예를 보여줍니다.

원시 데이터

SELECT DISTINCT를 사용하여 데이터에서 볼 수 있는 고유한 값을 계산할 수 있습니다. 예를 들어 리전의 고유한 값을 얻으려면이 양식의 쿼리를 사용할 수 있습니다.

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

수백만 개의 디바이스와 수십억 개의 시계열을 추적하고 있을 수 있습니다. 그러나 대부분의 경우 이러한 흥미로운 변수는 몇 개에서 수십 개의 값이 있는 낮은 카디널리티 차원을 위한 것입니다. 원시 데이터에서 DISTINCT를 계산하려면 대량의 데이터를 스캔해야 할 수 있습니다.

고유 차원 값 사전 계산

대시보드가 대화형이 되도록 이러한 변수를 빠르게 로드해야 합니다. 또한 이러한 변수는 모든 대시보드 로드에 대해 계산되는 경우가 많으므로 비용 효율적이어야 합니다. 예약된 쿼리를 사용하여 이러한 변수를 찾고 파생된 테이블에서 구체화하는 것을 최적화할 수 있습니다.

먼저 DISTINCT 값을 계산할 때 조건자에 사용할 DISTINCT 값 또는 열을 계산해야 하는 차원을 식별해야 합니다.

이 예제에서는 대시보드가 차원 리전, 셀, 사일로, availability_zone 및 마이크로서비스에 대한 고유한 값을 채우고 있음을 확인할 수 있습니다. 따라서 아래 쿼리를 사용하여 이러한 고유 값을 미리 계산할 수 있습니다.

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_runtime을 사용하여 이를 시계열로 변환합니다. 이 데이터를 @scheduled_runtime 파라미터와 연결하면 지정된 시점에 나타나는 고유한 값을 추적하여 시계열 데이터를 생성할 수도 있습니다.

  • 이전 예제에서는 지표 값이 추적되는 것을 볼 수 있습니다. 이 예제에서는 COUNT(*)를 사용합니다. 대시보드에 대해 추적하려는 경우 다른 의미 있는 집계를 계산할 수 있습니다.

다음은 이전 쿼리를 사용하여 예약된 계산에 대한 구성입니다. 이 예제에서는 일정 표현식 cron(0/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": "******" }

파생 테이블에서 변수 계산

예약된 계산이 파생 테이블 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