

신중한 고려 끝에 Amazon Kinesis Data Analytics for SQL 애플리케이션을 중단하기로 결정했습니다.

1. **2025년 9월 1**일부터 Amazon Kinesis Data Analytics for SQL 애플리케이션에 대한 버그 수정은 제공되지 않습니다. 곧 중단될 예정이므로 지원이 제한될 예정이기 때문입니다.

2. **2025년 10월 15**일부터 새 Kinesis Data Analytics for SQL 애플리케이션을 생성할 수 없습니다.

3. **2026년 1월 27**일부터 애플리케이션이 삭제됩니다. Amazon Kinesis Data Analytics for SQL 애플리케이션을 시작하거나 작동할 수 없게 됩니다. 그 시점부터 Amazon Kinesis Data Analytics for SQL에 대한 지원을 더 이상 이용할 수 없습니다. 자세한 내용은 [Amazon Kinesis Data Analytics for SQL 애플리케이션 단종](discontinuation.md) 단원을 참조하십시오.

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

# 슬라이딩 윈도우
<a name="sliding-window-concepts"></a>

`GROUP BY`를 사용하여 레코드를 그룹화하는 대신 시간 기반 또는 행 기반 윈도우를 정의할 수 있습니다. 명시적 `WINDOW` 절을 추가함으로써 이를 수행합니다.

이 경우 시간이 지남에 따라 창이 미끄러지면서 스트림에 새 레코드가 표시되면 Amazon Kinesis Data Analytics에서 출력을 내보냅니다. Kinesis Data Analytics는 윈도우 속의 행을 처리하여 이 출력을 내보냅니다. 윈도우는 이러한 유형의 처리에서 중첩될 수 있으며, 레코드는 복수의 윈도우의 일부일 수 있고 각 윈도우에서 처리될 수 있습니다. 다음 예는 슬라이딩 윈도우에 대한 설명입니다.

스트림 상에서 레코드를 계수하는 간단한 쿼리를 생각해 보겠습니다. 이 예에서는 5초 윈도우를 가정합니다. 다음 예 스트림에서 새 레코드가 t1, t2, t6, 및 t7에 도착하고 세 개의 레코드가 t8 초에 도착합니다.

![\[Timeline showing record arrivals at t1, t2, t6, t7, and multiple at t8 within a 5-second window.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-10.png)


다음 사항에 유의하십시오:
+ 이 예에서는 5초 윈도우를 가정합니다. 5초 윈도우가 시간 경과에 따라 연속적으로 이동합니다.
+ 윈도우로 들어오는 모든 행에 대해 출력 행이 슬라이딩 윈도우에 의해 방출됩니다. 애플리케이션이 시작되면 바로 5초 윈도우가 지나가지 않은 상태에서도 스트림 상에 나타나는 모든 새 레코드에 대해 쿼리가 출력을 방출합니다. 예를 들어, 레코드가 처음 1초와 그 다음 1초에 나타날 때 쿼리가 출력을 방출합니다. 나중에 쿼리는 5초 윈도우에서 레코드를 처리합니다.
+ 윈도우는 시간 경과에 따라 이동합니다. 스트림 상의 오래된 레코드가 윈도우를 벗어나는 경우, 5초 윈도우에 속하는 새 레코드가 스트림에 나타나지 않는 한 쿼리가 출력을 방출하지 않습니다.

  

쿼리가 t0에 실행을 시작한다고 가정해 보겠습니다. 그러면 다음이 발생합니다:

1. 시간 t0에 쿼리가 시작됩니다. 이 시점에는 레코드가 없기 때문에 쿼리가 출력(개수 값)을 방출하지 않습니다.  
![\[Timeline showing a stream starting at t0 with no output initially indicated.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-t0.png)

1. t1 시점에 새 레코드가 스트림 상에 나타나고, 쿼리가 수 값 1을 방출합니다.  
![\[Timeline showing a stream with a record appearing at time t1, and an arrow pointing to t0.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-t1.png)

1. t2 시점에 또 다른 레코드가 나타나고, 쿼리가 수 값 2를 방출합니다.  
![\[Timeline showing stream events at different time points, with two vertical bars at the end.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-t2.png)

1. 5초 윈도우가 시간 경과에 따라 이동합니다.
   + t3에서 슬라이딩 윈도우가 t3에서 t0으로 이동
   + t4에서 (슬라이딩 윈도우가 t4에서 t0으로 이동)
   + t5에서 슬라이딩 윈도우가 t5에서 t0으로 이동

   이 모든 시간에서 5초 윈도우는 동일한 레코드를 지닙니다-새 레코드는 없습니다. 따라서 쿼리는 출력을 방출하지 않습니다.  
![\[Timeline showing stream with multiple time points and colored rectangles representing data windows.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-t3-4-5.png)

1. 시간 t6에서 5초 윈도우는 (t6에서 t1). 쿼리가 t6에서 새 레코드 하나를 감지하고 출력 2를 방출합니다. t1에서 레코드는 더 이상 윈도우에 없으므로 계수되지 않습니다.  
![\[Timeline showing stream events at different time points with a sliding 5-second window.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-t6.png)

1. t7에서 5초 윈도우는 t7에서 t2로 이동합니다. 쿼리가 t7에서 새 레코드 하나를 감지하고 출력 2를 방출합니다. t2에서 레코드는 더 이상 5초 윈도우에 없으므로 계수되지 않습니다.  
![\[Timeline showing stream events and time points from t0 to t7, with a 5-second window highlighted.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-t7.png)

1. t8에서 5초 윈도우는 t8에서 t3로 이동합니다. 쿼리가 새 레코드 3개를 감지하므로 레코드 개수 5를 방출합니다.  
![\[Timeline showing stream events with orange bars representing record counts at different time intervals.\]](http://docs.aws.amazon.com/ko_kr/kinesisanalytics/latest/dev/images/sliding-t8.png)

요약하자면 윈도우는 크기가 고정이며 시간 경과에 따라 이동합니다. 쿼리는 새 레코드가 나타날 때 출력을 방출합니다.

**참고**  
1시간 이내의 슬라이딩 윈도우를 사용하는 것이 좋습니다. 더 긴 윈도우를 사용하는 경우 애플리케이션을 정기적인 시스템 유지 관리 이후 다시 시작하는 데 시간이 더 걸립니다. 원본 데이터를 스트림에서 다시 읽어야 하기 때문입니다.

다음은 `WINDOW` 절을 사용하여 윈도우를 정의하고 집계를 수행하는 예 쿼리입니다. 쿼리가 `GROUP BY`를 지정하지 않기 때문에 쿼리는 슬라이딩 윈도우 접근 방식을 사용하여 스트림 상에서 레코드를 처리합니다.



## 예 1: 1분 슬라이딩 윈도우를 사용하여 스트림 처리하기
<a name="sliding-ex1"></a>

애플리케이션 내 스트림(`SOURCE_SQL_STREAM_001`)을 채우는 시작하기 실습에서의 데모 스트림을 검토합니다. 스키마는 다음과 같습니다.

```
(TICKER_SYMBOL VARCHAR(4), 
 SECTOR varchar(16),
 CHANGE REAL,
 PRICE REAL)
```

애플리케이션이 1분 슬라이딩 윈도우를 사용하여 집계를 연산하도록 하는 것을 가정해 보겠습니다. 즉, 스트림 상에 나타나는 새 레코드 각각에 대해 애플리케이션이 앞선 1분 윈도우의 레코드에 집계를 적용함으로써 출력을 방출하도록 하는 것입니다.

다음의 시간 기반 윈도우 형식 쿼리를 사용할 수 있습니다. 쿼리는 `WINDOW` 절을 사용하여 1분 범위 간격을 정의합니다. `WINDOW`의 `PARTITION BY` 절이 슬라이딩 윈도우 내에 있는 티커 값을 기준으로 레코드를 그룹화합니다.

```
SELECT STREAM ticker_symbol,
              MIN(Price) OVER W1 AS Min_Price,
              MAX(Price) OVER W1 AS Max_Price,
              AVG(Price) OVER W1 AS Avg_Price
FROM   "SOURCE_SQL_STREAM_001"
WINDOW W1 AS (
   PARTITION BY ticker_symbol 
   RANGE INTERVAL '1' MINUTE PRECEDING);
```

**쿼리 테스트 방법**

1. [시작하기 실습](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)에 따라 애플리케이션을 설정합니다.

1. 애플리케이션 코드에서 `SELECT` 문을 앞의 `SELECT` 쿼리로 바꿉니다. 그러면 애플리케이션 코드가 다음과 같을 것입니다.

   ```
   CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
                            ticker_symbol VARCHAR(10), 
                            Min_Price     double, 
                            Max_Price     double, 
                            Avg_Price     double);
   CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
      INSERT INTO "DESTINATION_SQL_STREAM"
        SELECT STREAM ticker_symbol,
                      MIN(Price) OVER W1 AS Min_Price,
                      MAX(Price) OVER W1 AS Max_Price,
                      AVG(Price) OVER W1 AS Avg_Price
        FROM   "SOURCE_SQL_STREAM_001"
        WINDOW W1 AS (
           PARTITION BY ticker_symbol 
           RANGE INTERVAL '1' MINUTE PRECEDING);
   ```

## 예 2: 슬라이딩 윈도에 집계를 적용하는 퀴리
<a name="sliding-ex2"></a>

데모 스트림에 대한 다음 쿼리는 10초 윈도우에서의 각 티커의 가격 변동률 평균을 반환합니다.

```
SELECT STREAM Ticker_Symbol,
              AVG(Change / (Price - Change)) over W1 as Avg_Percent_Change
FROM "SOURCE_SQL_STREAM_001"
WINDOW W1 AS (
        PARTITION BY ticker_symbol 
        RANGE INTERVAL '10' SECOND PRECEDING);
```



**쿼리 테스트 방법**

1. [시작하기 실습](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)에 따라 애플리케이션을 설정합니다.

1. 애플리케이션 코드에서 `SELECT` 문을 앞의 `SELECT` 쿼리로 바꿉니다. 그러면 애플리케이션 코드가 다음과 같을 것입니다.

   ```
   CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
                               ticker_symbol VARCHAR(10), 
                               Avg_Percent_Change double);
   CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
      INSERT INTO "DESTINATION_SQL_STREAM"
         SELECT STREAM Ticker_Symbol,
                       AVG(Change / (Price - Change)) over W1 as Avg_Percent_Change
         FROM "SOURCE_SQL_STREAM_001"
         WINDOW W1 AS (
                 PARTITION BY ticker_symbol 
                 RANGE INTERVAL '10' SECOND PRECEDING);
   ```

## 예 3: 동일한 스트림 상에서 복수의 슬라이딩 윈도우에서 나오는 데이터의 쿼리
<a name="sliding-ex3"></a>

각 열의 값이 동일한 스트림에 대해 정의된 여러 슬라이딩 윈도를 사용하여 계산되는 출력을 방출하도록 쿼리를 작성할 수 있습니다.

다음 예에서는 쿼리가 출력 티커, 가격, a2 및 a10을 방출합니다. 2행 이동 평균이 10행 이동 평균을 교차하는 티커 기호에 대해 출력을 방출합니다. `a2` 및 `a10` 열 값은 2행 및 10행 슬라이딩 윈도우로부터 추출됩니다.

```
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
                           ticker_symbol      VARCHAR(12), 
                           price              double, 
                           average_last2rows  double, 
                           average_last10rows double);

CREATE OR REPLACE PUMP "myPump" AS INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM ticker_symbol, 
              price, 
              avg(price) over last2rows, 
              avg(price) over last10rows
FROM SOURCE_SQL_STREAM_001
WINDOW
    last2rows AS (PARTITION BY ticker_symbol ROWS 2 PRECEDING),
    last10rows AS (PARTITION BY ticker_symbol ROWS 10 PRECEDING);
```

데모 스트림에 대해 이 쿼리를 시험하려면 [예제 1.](#sliding-ex1)에 설명된 테스트 절차에 따릅니다.