

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

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

# 예약된 쿼리 개념
<a name="scheduledqueries-concepts"></a>

**쿼리 문자열** - 결과를 미리 계산하여 다른 Timestream for LiveAnalytics 테이블에 저장하는 쿼리입니다. Timestream for LiveAnalytics의 전체 SQL 표면 영역을 사용하여 예약된 쿼리를 정의할 수 있습니다.이 영역을 사용하면 일반 테이블 표현식, 중첩된 쿼리, 창 함수 또는 [Timestream for LiveAnalytics 쿼리 언어](https://docs.aws.amazon.com/timestream/latest/developerguide/reference.html)에서 지원하는 모든 종류의 집계 및 스칼라 함수를 사용하여 쿼리를 유연하게 작성할 수 있습니다.

**예약 표현식** - 예약된 쿼리 인스턴스가 실행되는 시기를 지정할 수 있습니다. 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 리소스 태그 지정](https://docs.aws.amazon.com/timestream/latest/developerguide/tagging-keyspaces.html)을 참조하세요.

**예제**

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

```
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개의 응답을 보내고 쿼리 실행을 진행합니다. 그러나 동시에 실행 중인 예약 쿼리 실행이 여러 개 있는 경우 수동으로 트리거된 예약 실행 실행이 지연될 수 있습니다.