스태거 윈도우 - SQL애플리케이션용 Amazon Kinesis Data Analytics 개발자 가이드

새 프로젝트의 경우 애플리케이션용 Kinesis Data Analytics보다 Apache Flink Studio용 새로운 관리형 서비스를 사용하는 것이 좋습니다. SQL Managed Service for Apache Flink Studio는 사용 편의성과 고급 분석 기능을 결합하여 정교한 스트림 처리 애플리케이션을 몇 분 만에 구축할 수 있도록 합니다.

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

스태거 윈도우

스태거 윈도우를 사용하는 것은 일관성 없는 시간에 도착하는 데이터 그룹을 분석하는 데 적합한 윈도우 배치 방법입니다. 이 방법은 관련 판매나 로그 기록 모음 같은 시계열 분석 사용 사례에 적합합니다.

예를 들어, VPC 플로우 로그에는 약 10분의 캡처 윈도우가 있습니다. 그러나 클라이언트에서 데이터를 수집하는 경우 최대 15분의 캡처 윈도우가 있습니다. 스태거 윈도우는 분석을 위해 이러한 로그를 집계할 때 아주 유용한 방법입니다.

스태거 윈도우를 사용하면 텀블링 윈도우를 사용할 때처럼 관련 데이터가 같은 시간 제한 윈도우에 속하지 않는 문제가 발생하지 않습니다.

텀블링 윈도우를 이용할 때의 부분적 결과

지연되거나 순서가 맞지 않는 데이터에 대해 텀블링 윈도우을(를) 이용할 때는 몇 가지 제한 사항이 있습니다.

텀블링 윈도우를 사용하여 시간 관련 데이터 그룹을 분석하면 개별 레코드가 별도의 윈도우로 나뉠 수 있습니다. 따라서 각 윈도우에서의 부분 결과는 나중에 결합되어 각 레코드 그룹에 대한 완전한 결과를 산출해야 합니다.

다음 텀블링 윈도우 쿼리에서 레코드는 행 시간, 이벤트 시간 및 티커 기호를 기준으로 윈도우로 그룹화됩니다.

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( TICKER_SYMBOL VARCHAR(4), EVENT_TIME timestamp, TICKER_COUNT DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM TICKER_SYMBOL, FLOOR(EVENT_TIME TO MINUTE), COUNT(TICKER_SYMBOL) AS TICKER_COUNT FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, FLOOR(EVENT_TIME TO MINUTE), STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '1' MINUTE);

다음 그림에서 애플리케이션은 1분 단위의 거래 발생 시간(이벤트 시간)을 기준으로, 자신이 수신한 거래의 수를 계산합니다. 애플리케이션은 텀블링 윈도우를 이용해 행 시간과 이벤트 시간을 기준으로 데이터를 그룹화할 수 있습니다. 애플리케이션은 레코드 4개를 수신하며 각 레코드는 이전 레코드 수신으로부터 1분 안에 도착합니다. 행 시간, 이벤트 시간 및 티커 기호를 기준으로 레코드를 그룹화합니다. 일부 레코드는 첫 번째 텀블링 윈도우가 끝난 후 도착하며, 따라서 모든 레코드가 같은 1분 텀블링 윈도우에 속하지는 않습니다.

Tumbling windows diagram showing data grouping by row time, event time, and ticker symbol over two minutes.

앞의 그림에는 다음과 같은 이벤트가 존재합니다.

ROWTIME EVENT_TIME TICKER_SYMBOL
11:00:20 11:00:10 AMZN
11:00:30 11:00:20 AMZN
11:01:05 11:00:55 AMZN
11:01:15 11:01:05 AMZN

텀블링 윈도우 애플리케이션의 결과 모음은 다음처럼 표시됩니다.

ROWTIME EVENT_TIME TICKER_SYMBOL COUNT
11:01:00 11:00:00 AMZN 2
11:02:00 11:00:00 AMZN 1
11:02:00 11:01:00 AMZN 1

앞의 결과 세트에서는 3가지 결과가 반환됩니다.

  • 최초 레코드 2개를 집계하는 ROWTIME이 11:01:00인 레코드.

  • 3번째 레코드만 집계하는 11:02:00 시점의 레코드. 이 레코드는 두 번째 윈도우에는 ROWTIME이 있지만 첫 번째 윈도우에는 EVENT_TIME이 있습니다.

  • 4번째 레코드만 집계하는 11:02:00 시점의 레코드.

전체 결과 세트를 분석하려면, 레코드를 지속성 스토어에서 집계해야 합니다. 이렇게 되면 애플리케이션의 복잡성과 처리 요구사항이 증가합니다.

스태거 윈도우를 이용할 때의 전체 결과

시간 관련 데이터 레코드의 정확성 개선을 위해, Kinesis Data Analytics는 스태거 윈도우라는 새로운 윈도우 유형을 제공합니다. 이 유형의 윈도우에서는 파티션 키와 일치하는 최초 이벤트가 고정된 시간 간격과 무관하게 도착했을 때 윈도우가 열립니다. 윈도우는 윈도우가 열린 시간을 기준으로 측정하는, 지정된 기간을 기준으로 닫힙니다.

스태거 윈도우는 윈도우 절의 각 키 그룹화에 대한 별도의 시간 제한 윈도우입니다. 애플리케이션은 모든 결과에 단일 윈도우를 이용하는 대신, 자체 시간 윈도우 내 각 윈도우 절의 결과를 집계합니다.

다음 스태거 윈도우 쿼리에서 레코드는 이벤트 시간 및 티커 기호를 기준으로 윈도우로 그룹화됩니다.

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), event_time TIMESTAMP, ticker_count DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM TICKER_SYMBOL, FLOOR(EVENT_TIME TO MINUTE), COUNT(TICKER_SYMBOL) AS ticker_count FROM "SOURCE_SQL_STREAM_001" WINDOWED BY STAGGER ( PARTITION BY FLOOR(EVENT_TIME TO MINUTE), TICKER_SYMBOL RANGE INTERVAL '1' MINUTE);

다음 그림에서 이벤트는 이벤트 시간 및 티커 기호를 기준으로 스태거 창으로 집계됩니다.

Diagram showing event aggregation into stagger windows by event time and ticker symbol.

앞의 그림에는 텀블링 윈도우 애플리케이션이 분석한 것과 같은 이벤트인 다음 이벤트가 존재합니다.

ROWTIME EVENT_TIME TICKER_SYMBOL
11:00:20 11:00:10 AMZN
11:00:30 11:00:20 AMZN
11:01:05 11:00:55 AMZN
11:01:15 11:01:05 AMZN

스태거 윈도우 애플리케이션의 결과 모음은 다음처럼 표시됩니다.

ROWTIME EVENT_TIME TICKER_SYMBOL 개수
11:01:20 11:00:00 AMZN 3
11:02:15 11:01:00 AMZN 1

반환된 레코드는 최초 입력 레코드 3개를 집계합니다. 레코드는 1분 스태거 윈도우로 그룹화됩니다. 스태거 윈도우는 애플리케이션이 (ROWTIME이 11:00:20인) 첫 번째 AMZN 레코드를 수신할 때 시작됩니다. 1분 스태거 윈도우가(11:01:20에) 만료되면, (ROWTIMEEVENT_TIME을 기준으로 할 때) 결과가 스태거 윈도우에 속하는 레코드가 출력 스트림에 작성됩니다. 스태거 윈도우를 이용하면, ROWTIMEEVENT_TIME이 1분 윈도우 이내인 모든 레코드가 단일 결과로 출력됩니다.

마지막 레코드(1 분 집합 외부의 EVENT_TIME 포함)는 별도로 집계됩니다. 이는 EVENT_TIME이 레코드를 결과 세트로 분리하는 데 사용되는 파티션 키 중 하나이고 첫 번째 윈도우에 대한 EVENT_TIME의 파티션 키가 11:00이기 때문입니다.

스태거 윈도우의 구문은 특수 절인 WINDOWED BY에서 정의됩니다. 이 절은 스트리밍 집계에서 GROUP BY 대신 사용합니다. 이 절은 선택 사항인 WHERE 절 바로 뒤, HAVING 절 앞에 표시됩니다.

스태거 윈도우는 WINDOWED BY 절에서 정의되며 파티션 키와 윈도우 길이라는 두 가지 파라미터를 취합니다. 파티션 키는 들어오는 데이터 스트림을 분할하며 윈도우가 열리는 시간을 정의합니다. 스태거 윈도우는 고유 파티션 키가 있는 첫 번째 윈도우가 스트림에 표시될 때 열립니다. 스태거 윈도우는 윈도우 길이로 정의하는 고정된 기간이 지나면 닫힙니다. 구문은 다음 코드 예에서 확인할 수 있습니다:

... FROM <stream-name> WHERE <... optional statements...> WINDOWED BY STAGGER( PARTITION BY <partition key(s)> RANGE INTERVAL <window length, interval> );