예약된 쿼리 개념 - Amazon Timestream

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

예약된 쿼리 개념

쿼리 문자열 - 결과를 미리 계산하여 다른 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 는 예약된 쿼리의 특정 인스턴스와 관련된 오류를 식별하는 데 도움이 되도록 예약된 쿼리 이름과 호출 시간을이 접두사에 추가합니다.

태그 지정 - 선택적으로 예약된 쿼리와 연결할 수 있는 태그를 지정할 수 있습니다. 자세한 내용은 LiveAnalytics 리소스 Timestream 태그 지정을 참조하세요.

예제

다음 예제에서는 예약된 쿼리를 사용하여 단순 집계를 계산합니다.

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 범위의 데이터에 대해 작동합니다.

중복 시간 범위가 있는 인스턴스 -이 예제에서 볼 수 있듯이 예약된 쿼리의 후속 인스턴스 두 개가 해당 시간 범위에서 겹칠 수 있습니다. 이는 요구 사항, 지정한 시간, 일정 표현식에 따라 제어할 수 있습니다. 이 경우 이러한 중복을 통해 이러한 계산은 도착이 약간 지연된 모든 데이터를 기반으로 집계를 업데이트할 수 있으며,이 예제에서는 최대 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 APIWord를 사용하여 @scheduled_runtime 파라미터에 사용되는 값인 InvocationTime 파라미터를 전달하여 예약된 쿼리의 특정 인스턴스를 수동으로 시작할 수 있습니다. 다음은 ExecuteScheduledQuery APIWord를 사용할 때 고려해야 할 몇 가지 중요한 사항입니다.

  • 이러한 호출을 여러 번 트리거하는 경우 이러한 호출이 중복 시간 범위를 생성하지 않도록 해야 합니다. 중복되지 않는 시간 범위를 보장할 수 없는 경우 이러한 쿼리 실행이 순차적으로 하나씩 시작되어야 합니다. 시간 범위에서 겹치는 여러 쿼리 실행을 동시에 시작하는 경우 이러한 쿼리 실행에 대한 오류 보고서에서 버전 충돌이 발생할 수 있는 트리거 실패를 볼 수 있습니다.

  • @scheduled_runtime의 타임스탬프 값으로 호출을 시작할 수 있습니다. 따라서 소스 테이블에서 데이터가 업데이트된 범위에 해당하는 대상 테이블에서 적절한 시간 범위가 업데이트되도록 값을 적절하게 설정하는 것은 사용자의 책임입니다.