Stream Analytics 창 함수 소개

실시간 스트리밍 시나리오에서 임시 창에 포함된 데이터에서 작업을 수행하는 것은 일반적인 패턴입니다. Stream Analytics에는 개발자가 최소한의 노력으로 복잡한 스트림 처리 작업을 작성할 수 있도록 창 함수에 대한 네이티브 지원이 있습니다.

다음 5가지의 임시 창 중에서 선택할 수 있습니다.

Stream Analytics 작업에서 쿼리 구문의 GROUP BY 절에서 창 함수를 사용합니다. Windows() 함수를 사용하여 여러 창에서 이벤트를 집계할 수도 있습니다.

모든 작업 결과는 창의 에 출력됩니다. 스트림 분석 작업을 시작할 때 작업 출력 시작 시간을 지정할 수 있는데 이렇게 하면 시스템이 지정된 시간에 첫 번째 창을 출력하는 들어오는 스트림의 이전 이벤트를 자동으로 가져옵니다. 예를 들어 Now 옵션으로 시작하는 경우 데이터를 즉시 내보내기 시작합니다. 창의 출력은 사용된 집계 함수를 기반으로 하는 단일 이벤트입니다. 출력 이벤트에는 창의 끝에 타임스탬프가 있고 모든 창 함수는 고정 길이로 정의됩니다.

Diagram that shows the concept of Stream Analytics window functions.

연속 창

연속 창 함수를 사용하여 데이터 스트림을 다른 시간 세그먼트로 분할하고 이에 대한 기능을 수행합니다.

연속 창의 주요 차이점은 다음과 같습니다.

  • 반복되지 않습니다.
  • 겹치지 않습니다.
  • 이벤트는 두 개 이상의 연속 창에 속할 수 없습니다.

Diagram that shows an example Stream Analytics tumbling window.

예제의 입력 데이터는 다음과 같습니다.

스탬프 CreatedAt TimeZone
1 2021-10-26T10:15:01 PST
5 2021-10-26T10:15:03 PST
4 2021-10-26T10:15:06 PST
... ... ...

샘플 쿼리는 다음과 같습니다.

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

샘플 출력은 다음과 같습니다.

WindowEndTime TimeZone Count
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 PST 2
2021-10-26T10:15:30 PST 4

도약 창

도약 창 함수는 고정된 기간만큼 시간을 앞으로 건너 뜁니다. 창 크기 보다 더 자주 겹쳐서 내보낼 수 있는 연속 창으로 생각하면 더 쉬울 수 있습니다. 이벤트는 둘 이상의 도약 창 결과 집합에 속할 수 있습니다. 연속 창과 동일한 도약 창을 만들려면 도약 크기를 창 크기와 동일하도록 지정합니다.

Diagram that shows an example of the hopping window.

샘플 데이터는 다음과 같습니다.

스탬프 CreatedAt 항목
1 2021-10-26T10:15:01 스트리밍
5 2021-10-26T10:15:03 스트리밍
4 2021-10-26T10:15:06 스트리밍
... ... ...

샘플 쿼리는 다음과 같습니다.

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

샘플 출력은 다음과 같습니다.

WindowEndTime 항목 Count
2021-10-26T10:15:10 스트리밍 5
2021-10-26T10:15:15 스트리밍 3
2021-10-26T10:15:20 스트리밍 2
2021-10-26T10:15:25 스트리밍 4
2021-10-26T10:15:30 스트리밍 4

슬라이딩 윈도우

연속 창 또는 도약 창과 달리 슬라이딩 창은 창의 내용이 실제로 변경된 시점에 대한 이벤트만 출력합니다. 즉, 이벤트가 창에 들어가거나 종료 될 때를 말합니다. 따라서 모든 창에는 하나 이상의 이벤트가 있습니다. 도약 창과 유사하게 이벤트는 둘 이상의 슬라이딩 윈도우에 속할 수 있습니다.

Diagram that shows an example of a sliding window.

샘플 입력 데이터는 다음과 같습니다.

스탬프 CreatedAt 항목
1 2021-10-26T10:15:10 스트리밍
5 2021-10-26T10:15:12 스트리밍
9 2021-10-26T10:15:15 스트리밍
7 2021-10-26T10:15:15 스트리밍
8 2021-10-26T10:15:27 스트리밍

샘플 쿼리는 다음과 같습니다.

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

출력

WindowEndTime 항목 Count
2021-10-26T10:15:15 스트리밍 4
2021-10-26T10:15:20 스트리밍 3

세션 창

세션 창 함수는 데이터가 없는 기간을 필터링하여 비슷한 시간에 도착하는 이벤트를 그룹화합니다. 다음과 같은 세 가지 주요 매개 변수가 있습니다.

  • 시간 제한
  • 최대 기간
  • 분할 키(선택 사항)

Diagram that shows a sample Stream Analytics session window.

세션 창은 첫 번째 이벤트가 발생할 때 시작합니다. 마지막으로 수집된 이벤트에서 지정된 시간 제한 내에 다른 이벤트가 발생하는 경우 창은 새 이벤트를 포함하도록 확장됩니다. 그렇지 않으면 시간 제한 내에 이벤트가 발생하지 않는 경우 창은 시간 제한에 닫힙니다.

지정된 시간 제한 내에서 이벤트가 계속 발생하는 경우 세션 창은 최대 기간에 도달할 때까지 계속 확장됩니다. 최대 지속 시간 검사 간격은 지정된 최대 지속 시간과 동일한 크기로 설정됩니다. 예를 들어 최대 기간이 10인 경우 창이 최대 기간을 초과하는지에 대한 검사가 t = 0, 10, 20, 30 등에 수행됩니다.

파티션 키가 제공되는 경우 이벤트는 키와 함께 그룹화되고 세션 창은 각 그룹에 독립적으로 적용됩니다. 이 분할은 다른 사용자 또는 디바이스에 다른 세션 창이 필요한 경우에 유용합니다.

샘플 입력 데이터는 다음과 같습니다.

스탬프 CreatedAt 항목
1 2021-10-26T10:15:01 스트리밍
2 2021-10-26T10:15:04 스트리밍
3 2021-10-26T10:15:13 스트리밍
... ... ...

샘플 쿼리는 다음과 같습니다.

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

출력

WindowEndTime 항목 Count
2021-10-26T10:15:09 스트리밍 2
2021-10-26T10:15:24 스트리밍 4
2021-10-26T10:15:31 스트리밍 2
2021-10-26T10:15:39 스트리밍 1

스냅숏 창

스냅샷 창은 동일한 타임 스탬프를 포함하는 이벤트를 그룹화합니다. 특정 창 함수(예: Sessionwindow())가 필요한 다른 창 유형과는 달리, GROUP BY 절에 System.Timestamp()를 추가하여 스냅샷 창을 적용할 수 있습니다.

Diagram that shows a sample Steam Analytics snapshot window.

샘플 입력 데이터는 다음과 같습니다.

스탬프 CreatedAt 항목
1 2021-10-26T10:15:04 스트리밍
2 2021-10-26T10:15:04 스트리밍
3 2021-10-26T10:15:04 스트리밍
... ... ...

샘플 쿼리는 다음과 같습니다.

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

샘플 출력은 다음과 같습니다.

WindowEndTime 항목 Count
2021-10-26T10:15:04 스트리밍 4
2021-10-26T10:15:10 스트리밍 2
2021-10-26T10:15:13 스트리밍 1
2021-10-26T10:15:22 스트리밍 2

다음 단계

다음 문서를 참조하세요.