신중한 고려 끝에 두 단계로 Amazon Kinesis Data Analytics for SQL applications를 중단하기로 결정했습니다.
1. 2025년 10월 15일부터 SQL 애플리케이션을 위한 새 Kinesis Data Analytics를 생성할 수 없습니다.
2. 2026년 1월 27일부터 애플리케이션이 삭제됩니다. SQL 애플리케이션용 Amazon Kinesis Data Analytics를 시작하거나 작동할 수 없습니다. 해당 시점부터 에 대한 Amazon Kinesis Data AnalyticsSQL에 대한 지원을 더 이상 사용할 수 없습니다. 자세한 내용은 Amazon Kinesis Data Analytics for SQL Applications 중단 단원을 참조하십시오.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
슬라이딩 윈도우
GROUP BY
를 사용하여 레코드를 그룹화하는 대신 시간 기반 또는 행 기반 윈도우를 정의할 수 있습니다. 명시적 WINDOW
절을 추가함으로써 이를 수행합니다.
이 경우 시간이 지남에 따라 창이 미끄러지면서 스트림에 새 레코드가 표시되면 Amazon Kinesis Data Analytics에서 출력을 내보냅니다. Kinesis Data Analytics는 윈도우 속의 행을 처리하여 이 출력을 내보냅니다. 윈도우는 이러한 유형의 처리에서 중첩될 수 있으며, 레코드는 복수의 윈도우의 일부일 수 있고 각 윈도우에서 처리될 수 있습니다. 다음 예는 슬라이딩 윈도우에 대한 설명입니다.
스트림 상에서 레코드를 계수하는 간단한 쿼리를 생각해 보겠습니다. 이 예에서는 5초 윈도우를 가정합니다. 다음 예 스트림에서 새 레코드가 t1, t2, t6, 및 t7에 도착하고 세 개의 레코드가 t8 초에 도착합니다.
다음 사항에 유의하세요:
-
이 예에서는 5초 윈도우를 가정합니다. 5초 윈도우가 시간 경과에 따라 연속적으로 이동합니다.
-
윈도우로 들어오는 모든 행에 대해 출력 행이 슬라이딩 윈도우에 의해 방출됩니다. 애플리케이션이 시작되면 바로 5초 윈도우가 지나가지 않은 상태에서도 스트림 상에 나타나는 모든 새 레코드에 대해 쿼리가 출력을 방출합니다. 예를 들어, 레코드가 처음 1초와 그 다음 1초에 나타날 때 쿼리가 출력을 방출합니다. 나중에 쿼리는 5초 윈도우에서 레코드를 처리합니다.
-
윈도우는 시간 경과에 따라 이동합니다. 스트림 상의 오래된 레코드가 윈도우를 벗어나는 경우, 5초 윈도우에 속하는 새 레코드가 스트림에 나타나지 않는 한 쿼리가 출력을 방출하지 않습니다.
쿼리가 t0에 실행을 시작한다고 가정해 보겠습니다. 그러면 다음이 발생합니다:
-
시간 t0에 쿼리가 시작됩니다. 이 시점에는 레코드가 없기 때문에 쿼리가 출력(개수 값)을 방출하지 않습니다.
-
t1 시점에 새 레코드가 스트림 상에 나타나고, 쿼리가 수 값 1을 방출합니다.
-
t2 시점에 또 다른 레코드가 나타나고, 쿼리가 수 값 2를 방출합니다.
-
5초 윈도우가 시간 경과에 따라 이동합니다.
-
t3에서 슬라이딩 윈도우가 t3에서 t0으로 이동
-
t4에서 (슬라이딩 윈도우가 t4에서 t0으로 이동)
-
t5에서 슬라이딩 윈도우가 t5에서 t0으로 이동
이 모든 시간에서 5초 윈도우는 동일한 레코드를 지닙니다—새 레코드는 없습니다. 따라서 쿼리는 출력을 방출하지 않습니다.
-
-
시간 t6에서 5초 윈도우는 (t6에서 t1). 쿼리가 t6에서 새 레코드 하나를 감지하고 출력 2를 방출합니다. t1에서 레코드는 더 이상 윈도우에 없으므로 계수되지 않습니다.
-
t7에서 5초 윈도우는 t7에서 t2로 이동합니다. 쿼리가 t7에서 새 레코드 하나를 감지하고 출력 2를 방출합니다. t2에서 레코드는 더 이상 5초 윈도우에 없으므로 계수되지 않습니다.
-
t8에서 5초 윈도우는 t8에서 t3로 이동합니다. 쿼리가 새 레코드 3개를 감지하므로 레코드 개수 5를 방출합니다.
요약하자면 윈도우는 크기가 고정이며 시간 경과에 따라 이동합니다. 쿼리는 새 레코드가 나타날 때 출력을 방출합니다.
참고
1시간 이내의 슬라이딩 윈도우를 사용하는 것이 좋습니다. 더 긴 윈도우를 사용하는 경우 애플리케이션을 정기적인 시스템 유지 관리 이후 다시 시작하는 데 시간이 더 걸립니다. 원본 데이터를 스트림에서 다시 읽어야 하기 때문입니다.
다음은 WINDOW
절을 사용하여 윈도우를 정의하고 집계를 수행하는 예 쿼리입니다. 쿼리가 GROUP BY
를 지정하지 않기 때문에 쿼리는 슬라이딩 윈도우 접근 방식을 사용하여 스트림 상에서 레코드를 처리합니다.
예 1: 1분 슬라이딩 윈도우를 사용하여 스트림 처리하기
애플리케이션 내 스트림(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);
쿼리 테스트 방법
-
시작하기 실습에 따라 애플리케이션을 설정합니다.
-
애플리케이션 코드에서
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: 슬라이딩 윈도에 집계를 적용하는 퀴리
데모 스트림에 대한 다음 쿼리는 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);
쿼리 테스트 방법
-
시작하기 실습에 따라 애플리케이션을 설정합니다.
-
애플리케이션 코드에서
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: 동일한 스트림 상에서 복수의 슬라이딩 윈도우에서 나오는 데이터의 쿼리
각 열의 값이 동일한 스트림에 대해 정의된 여러 슬라이딩 윈도를 사용하여 계산되는 출력을 방출하도록 쿼리를 작성할 수 있습니다.
다음 예에서는 쿼리가 출력 티커, 가격, 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에 설명된 테스트 절차에 따릅니다.