텀블링 윈도우(그룹별 집계) - Amazon Kinesis Data Analytics for SQL Applications 개발자 안내서

신중한 고려 끝에 두 단계로 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 중단 단원을 참조하십시오.

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

텀블링 윈도우(그룹별 집계)

윈도우 모드 쿼리가 비중첩 방식으로 각 윈도우를 처리하는 경우 이 윈도우를 텀블링 윈도우라고 합니다. 이 경우 애플리케이션 내 스트림의 각 레코드는 특정 윈도우에 속합니다. 쿼리가 레코드가 속한 윈도우를 처리할 때 한 번만 처리됩니다.

Timeline showing non-overlapping windows processing data streams at distinct time intervals.

예를 들어, GROUP BY 절을 사용한 집계 퀴리는 텀블링 윈도우 내에 있는 행을 처리합니다. 시작하기 실습의 데모 스트림은 애플리케이션의 애플리케이션 내 스트림(SOURCE_SQL_STREAM_001)으로 매핑되는 주가 데이터를 수신합니다. 이 스트림의 스키마는 다음과 같습니다.

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

애플리케이션 코드에서 1분 윈도우에 대해 티커 별로 집계(최소, 최대) 가격을 찾고자 한다고 가정해 보겠습니다. 다음 쿼리를 사용할 수 있습니다.

SELECT STREAM ROWTIME, Ticker_Symbol, MIN(Price) AS Price, MAX(Price) AS Price FROM "SOURCE_SQL_STREAM_001" GROUP BY Ticker_Symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);

앞의 예는 시간 기반 윈도우 모드 쿼리의 예입니다. 이 쿼리에서는 ROWTIME 값을 기준으로 레코드를 그룹화합니다. 분 기준 보고의 경우 STEP 함수는 ROWTIME 값을 가장 가까운 분으로 내림합니다.

참고

FLOOR 함수를 사용하여 레코드를 윈도우로 그룹화할 수도 있습니다. 그러나 함수를 사용하여 레코드를 윈도우로 그룹화할 수도 있지만, FLOOR는 시간 값을 전체 시간 단위(시, 분, 초 등)로만 내림할 수 있습니다. STEP은 값을 임의의 간격(예: 30초)으로 내림할 수 있으므로 레코드를 텀블링 윈도우로 그룹화하려는 경우에 권장됩니다.

이 쿼리는 비중첩(텀블링) 윈도우의 예입니다. 1분 윈도우에 있는 GROUP BY 절 그룹 레코드와 각 레코드는 특정 윈도우(비중첩)에 속합니다. 쿼리는 분당 하나의 출력 레코드를 방출하여 특정 분에서 기록되는 최소/최대 티커 가격을 제공합니다. 이런 유형의 쿼리는 입력 데이터 스트림으로부터 주기적 보고서를 생성하는 데 유용합니다. 이 예에서는 1분마다 보고서가 생성됩니다.

쿼리 테스트 방법
  1. 시작하기 실습에 따라 애플리케이션을 설정합니다.

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

    CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), Min_Price DOUBLE, Max_Price DOUBLE); -- CREATE OR REPLACE PUMP to insert into output CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM Ticker_Symbol, MIN(Price) AS Min_Price, MAX(Price) AS Max_Price FROM "SOURCE_SQL_STREAM_001" GROUP BY Ticker_Symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);