Amazon Timestream for LiveAnalytics와 유사한 기능을 원하는 경우 Amazon Timestream for InfluxDB를 고려해 보세요. 간소화된 데이터 수집과 실시간 분석을 위한 10밀리초 미만의 쿼리 응답 시간을 제공합니다. 여기에서 자세히 알아보세요.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
고유한 차원 값
차원의 고유 값을 변수로 사용하여 특정 데이터 조각에 해당하는 지표를 드릴다운하려는 대시보드가 있는 사용 사례가 있을 수 있습니다. 아래 스냅샷은 대시보드가 region, cell, silo, microservice, availability_zone과 같은 여러 차원의 고유 값을 미리 채우는 예제입니다. 여기서는 예약된 쿼리를 사용하여 추적 중인 지표에서 이러한 변수의 고유 값을 계산하는 속도를 크게 높이는 방법의 예를 보여줍니다.
원시 데이터
SELECT DISTINCT를 사용하여 데이터에서 보이는 고유 값을 계산할 수 있습니다. 예를 들어 리전의 고유 값을 얻으려면 이 양식의 쿼리를 사용할 수 있습니다.
SELECT DISTINCT region FROM "raw_data"."devops" WHERE time > ago(1h) ORDER BY 1
수백만 개의 디바이스와 수십억 개의 시계열을 추적하고 있을 수 있습니다. 그러나 대부분의 경우 이러한 흥미로운 변수는 값이 몇 개에서 수십 개에 불과한 더 낮은 카디널리티의 차원을 위한 것입니다. 원시 데이터에서 DISTINCT를 계산하려면 대량의 데이터를 스캔해야 할 수 있습니다.
고유한 차원 값 사전 계산
대시보드가 대화형이 되도록 이러한 변수를 빠르게 로드해야 합니다. 또한 이러한 변수는 모든 대시보드 로드에서 계산되는 경우가 많으므로 비용 효율성도 높일 수 있습니다. 예약된 쿼리를 사용하여 이러한 변수를 찾고 파생 테이블에서 구체화하는 것을 최적화할 수 있습니다.
먼저 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
여기에 유의해야 할 몇 가지 중요한 사항이 있습니다.
-
하나의 예약된 계산을 사용하여 여러 쿼리의 값을 사전 계산할 수 있습니다. 예를 들어 앞의 쿼리를 사용하여 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": "******" }
파생 테이블에서 변수 계산
예약된 계산이 파생 테이블 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