Amazon Timestream for LiveAnalytics와 유사한 기능을 원하는 경우 Amazon Timestream for InfluxDB를 고려해 보세요. 간소화된 데이터 수집과 실시간 분석을 위한 10밀리초 미만의 쿼리 응답 시간을 제공합니다. 여기에서 자세히 알아보세요.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
예약된 쿼리 개념
쿼리 문자열 - 결과를 미리 계산하여 다른 Timestream for LiveAnalytics 테이블에 저장하는 쿼리입니다. Timestream for LiveAnalytics의 전체 SQL 표면 영역을 사용하여 예약된 쿼리를 정의할 수 있습니다.이 영역을 사용하면 일반 테이블 표현식, 중첩된 쿼리, 창 함수 또는 Timestream for LiveAnalytics 쿼리 언어에서 지원하는 모든 종류의 집계 및 스칼라 함수를 사용하여 쿼리를 유연하게 작성할 수 있습니다.
예약 표현식 - 예약된 쿼리 인스턴스가 실행되는 시기를 지정할 수 있습니다. cron 표현식(예: 매일 오전 8시 UTC에 실행) 또는 rate 표현식(예: 10분마다 실행)을 사용하여 표현식을 지정할 수 있습니다.
대상 구성 - 예약된 쿼리의 결과를 이 예약된 쿼리의 결과가 저장될 대상 테이블에 매핑하는 방법을 지정할 수 있습니다.
알림 구성 - Timestream for LiveAnalytics는 예약 표현식을 기반으로 예약된 쿼리의 인스턴스를 자동으로 실행합니다. 예약된 쿼리를 생성할 때 구성하는 SNS 주제에서 실행되는 모든 쿼리에 대한 알림을 받습니다. 이 알림은 인스턴스가 성공적으로 실행되었는지 또는 오류가 발생했는지 여부를 지정합니다. 또한 측정된 바이트, 대상 테이블에 작성된 데이터, 다음 간접 호출 시간 등과 같은 정보를 제공합니다.
다음은 이러한 종류의 알림 메시지의 예입니다.
{ "type":"AUTO_TRIGGER_SUCCESS", "arn":"arn:aws:timestream:us-east-1:123456789012:scheduled-query/ PT1mPerMinutePerRegionMeasureCount-9376096f7309", "nextInvocationEpochSecond":1637302500, "scheduledQueryRunSummary": { "invocationEpochSecond":1637302440, "triggerTimeMillis":1637302445697, "runStatus":"AUTO_TRIGGER_SUCCESS", "executionStats": { "executionTimeInMillis":21669, "dataWrites":36864, "bytesMetered":13547036820, "recordsIngested":1200, "queryResultRows":1200 } } }
이 알림 메시지에서 bytesMetered는 쿼리가 소스 테이블에서 스캔한 바이트이고 dataWrites는 대상 테이블에 작성된 바이트입니다.
참고
이러한 알림을 프로그래밍 방식으로 사용하는 경우 향후 알림 메시지에 새 필드를 추가할 수 있습니다.
오류 보고서 위치 - 예약된 쿼리는 비동기적으로 실행되고 대상 테이블에 데이터를 저장합니다. 인스턴스에 오류가 발생하면(예: 저장할 수 없는 잘못된 데이터) 오류가 발생한 레코드는 예약된 쿼리를 생성할 때 지정한 오류 보고서 위치의 오류 보고서에 작성됩니다. 위치에 대한 S3 버킷과 접두사를 지정합니다. Timestream for LiveAnalytics는 예약된 쿼리의 특정 인스턴스와 관련된 오류를 식별하는 데 도움이 되도록 이 접두사에 예약된 쿼리 이름과 간접 호출 시간을 추가합니다.
태그 지정 - 선택적으로 예약된 쿼리와 연결할 수 있는 태그를 지정할 수 있습니다. 자세한 내용은 Timestream for LiveAnalytics 리소스 태그 지정을 참조하세요.
예제
다음 예제에서는 예약된 쿼리를 사용하여 단순 집계를 계산합니다.
SELECT region, bin(time, 1m) as minute, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 10m AND @scheduled_runtime + 1m GROUP BY bin(time, 1m), region
@scheduled_runtime parameter - 이 예제에서는 이름이 지정된 특수 파라미터 @scheduled_runtime을 수락하는 쿼리를 볼 수 있습니다. 이는 예약된 쿼리의 특정 인스턴스를 간접적으로 호출할 때 서비스가 설정하는 특수 파라미터(타임스탬프 유형)로, 예약된 쿼리의 특정 인스턴스가 소스 테이블의 데이터를 분석하는 시간 범위를 결정론적으로 제어할 수 있습니다. 타임스탬프 유형이 예상되는 모든 위치에서 쿼리에 @scheduled_runtime을 사용할 수 있습니다.
예약 쿼리가 매시간 0분, 5분, 10분, 15분, 20분, 25분, 30분, 35분, 40분, 45분, 50분, 55분에 실행되는 cron(0/5 * * * ? *)이라는 예약 표현식을 설정하는 예를 생각해 보세요. 2021-12-01 00:05:00에 트리거된 인스턴스의 경우 @scheduled_runtime 파라미터가 이 값으로 초기화됩니다. 따라서 이 시간의 인스턴스는 2021-11-30 23:55:00~2021-12-01 00:06:00 범위의 데이터에 대해 작동합니다.
시간 범위가 겹치는 인스턴스 -이 예제에서 볼 수 있듯이 예약된 쿼리의 후속 인스턴스 2개가 시간 범위에서 겹칠 수 있습니다. 이는 요구 사항, 지정한 조건자 시간 및 예약 표현식에 따라 제어할 수 있습니다. 이 경우 이러한 중복을 통해 이러한 계산은 이 예제에서 최대 10분까지 도착이 약간 지연된 모든 데이터를 기반으로 집계를 업데이트할 수 있습니다. 2021-12-01 00:00:00에 트리거된 쿼리 실행은 2021-11-30 23:50:00~2021-12-30 00:01:00의 시간 범위를 포함하고, 2021-12-01 00:05:00에 트리거된 쿼리 실행은 2021-11-30 23:55:00~2021-12-01 00:06:00의 범위를 포함합니다.
정확성을 보장하고 대상 테이블에 저장된 집계가 소스 테이블에서 계산된 집계와 일치하는지 확인하기 위해 Timestream for LiveAnalytics는 2021-12-01 00:05:00의 계산이 완료된 후에만 2021-12-01 00:00:00의 계산이 수행되도록 합니다. 후자의 계산 결과는 새 값이 생성되는 경우 이전에 구체화된 집계를 업데이트할 수 있습니다. 내부적으로 Timestream for LiveAnalytics는 예약된 쿼리의 후자 인스턴스에서 생성된 레코드에 더 높은 버전 번호가 할당되는 레코드 버전을 사용합니다. 따라서 2021-12-01 00:05:00에 간접 호출로 계산된 집계는 소스 테이블에서 최신 데이터를 사용할 수 있다고 가정하여 2021-12-01 00:00:00에 간접 호출로 계산된 집계를 업데이트할 수 있습니다.
자동 트리거와 수동 트리거 비교 - 예약된 쿼리가 생성된 후 Timestream for LiveAnalytics는 지정된 일정에 따라 인스턴스를 자동으로 실행합니다. 이러한 자동 트리거는 전적으로 서비스에서 관리합니다.
그러나 예약된 쿼리의 일부 인스턴스를 수동으로 시작하려는 시나리오가 있을 수 있습니다. 쿼리 실행에서 특정 인스턴스가 실패한 경우, 자동 일정 실행 후 소스 테이블에 지연 도착 데이터 또는 업데이트가 있는 경우 또는 자동 쿼리 실행에서 다루지 않는 시간 범위(예: 예약된 쿼리 생성 전 시간 범위)에 대해 대상 테이블을 업데이트하려는 경우를 예로 들 수 있습니다.
ExecuteScheduledQuery API를 사용하여 @scheduled_runtime 파라미터에 사용되는 값인 InvocationTime 파라미터를 전달하여 예약된 쿼리의 특정 인스턴스를 수동으로 시작할 수 있습니다. 다음은 ExecuteScheduledQuery API를 사용할 때 고려해야 할 몇 가지 중요한 사항입니다.
-
이러한 간접 호출 중 여러 개를 트리거하는 경우 이러한 간접 호출로 인해 중복 시간 범위가 발생하지 않도록 해야 합니다. 겹치지 않는 시간 범위를 보장할 수 없는 경우 이러한 쿼리 실행이 순차적으로 시작되는지 확인합니다. 시간 범위에서 겹치는 여러 쿼리 실행을 동시에 시작하는 경우 이러한 쿼리 실행에 대한 오류 보고서에서 버전 충돌이 발생할 수 있는 트리거 실패를 볼 수 있습니다.
-
@scheduled_runtime에 대한 타임스탬프 값으로 간접 호출을 시작할 수 있습니다. 따라서 소스 테이블에서 데이터가 업데이트된 범위에 해당하는 대상 테이블에서 적절한 시간 범위가 업데이트되도록 값을 적절하게 설정하는 것은 사용자의 책임입니다.
-
ExecuteScheduledQuery API는 비동기적으로 작동합니다. 직접 호출이 성공하면 서비스는 200개의 응답을 보내고 쿼리 실행을 진행합니다. 그러나 동시에 실행 중인 예약 쿼리 실행이 여러 개 있는 경우 수동으로 트리거된 예약 실행 실행이 지연될 수 있습니다.