이벤트 창 사용

실시간 이벤트를 처리하는 응용 프로그램에서는 일반적으로 일정 기간에 포함되는 이벤트 하위 집합에 대해 일부 집합 기반 계산(집계) 또는 기타 연산을 수행해야 합니다. StreamInsight에서는 창을 통해 이러한 이벤트 하위 집합을 정의합니다. 이 항목에서는 창과 해당 창을 정의하는 방법을 설명하고 StreamInsight에서 지원되는 창의 유형을 보여 주며 다양한 연산자를 이용한 창 사용 방법을 설명합니다.

섹션 내용

창 유형

창에 대해 수행되는 연산

창 이해

창은 특정 시간대의 이벤트 데이터를 포함하며, 해당 창 내의 이벤트에 대해 다양한 연산을 수행할 수 있도록 합니다. 예를 들어 다음 그림에서처럼 지정된 창에서 페이로드 필드의 값을 모두 더해야 할 수 있습니다.

이벤트 창의 개념을 설명합니다.

이전 그림에서는 도약 창이 이벤트 스트림에 적용되는 방법과 집계가 창 스트림에 적용되는 방법을 보여 줍니다. 집계 결과를 전달하는 이벤트의 셰이프는 창 출력 정책에 따라 달라지며 여기서는 창 끝에서 시점 이벤트로 나타납니다.

기간 이동 연산은 이벤트 스트림을 창 스트림(CepWindowStream<T>)으로 전환하고 이를 집합 기반 연산의 기반으로 사용할 수 있습니다. 시간대에 따른 각 창은 이벤트 집합을 나타냅니다. 사용하는 창의 유형에 따라 이벤트가 배치되는 방식이 결정됩니다. 창은 시간 또는 개수를 기반으로 할 수 있습니다. 각 창 유형은 기간 이동 연산자로 표시됩니다.

집합 기반 연산은 창의 스트림을 이벤트의 스트림(CepStream<T>)으로 전환합니다. 이러한 집합 기반 연산은 다음과 같은 두 그룹으로 나뉩니다.

  • 입력 이벤트 집합에 대해 스칼라 결과를 생성하는 집계

  • 입력 이벤트 집합에 대해 출력 이벤트를 0개 이상 생성하는 연산

첫 번째 그룹의 예로는 sum, avg, count 및 사용자 정의 집계가 있습니다. 이러한 집계 중 하나 이상을 기간 이동 스트림에 적용할 수 있습니다. 각 결과 이벤트는 각 입력 창에 해당하며, 스칼라 집계 결과가 결과 이벤트 페이로드의 필드로 표시됩니다. 예를 들어 창에 있는 하나 이상의 페이로드 필드 값을 합한 다음 해당 값을 기반으로 추가 처리 작업을 수행하거나 집계된 데이터가 포함된 다른 이벤트 스트림을 만들 수 있습니다.

두 번째 그룹의 예로는 TopK 및 사용자 정의 연산자가 있습니다. 이러한 연산자는 기간 이동 스트림에 대해 정의되며 해당 계산의 결과로 창당 0개 이상의 여러 이벤트를 생성합니다. 예를 들어 TopK 연산자를 사용하여 특정 입력 스트림에 대해 정의된 각 스냅숏 창에서 상위 5개 이벤트를 가져오고 추가 처리를 위한 새 이벤트 스트림을 생성할 수 있습니다.

기간 이동 스트림의 이벤트가 집합 기반 연산자로 전달될 때와 집합 기반 연산자에서 스트림으로 다시 출력될 때 해당 타임스탬프가 변환될 수 있습니다. 이러한 변환을 각각 입력 정책 및 출력 정책이라고 합니다. 이러한 정책은 이벤트가 창에 표시되는 방법 및 집합 기반 연산의 결과가 스트리밍 방식으로 출력되는 방법에 영향을 줍니다.

StreamInsight에서는 다음과 같은 창 유형을 지원합니다.

창 지정

다음 그림과 같이 창 사양은 세 부분으로 구성됩니다.

  • 창 정의(도약 창의 경우 시간 범위, 개수 기반 창의 경우 개수, 스냅숏 창의 경우 매개 변수 없음)

  • 입력 임시 변환(입력 정책)

  • 출력 임시 변환(출력 정책)

사용자 정의 집계의 이벤트 스트림

위의 그림에서는 창에 대해 집합 기반 연산을 수행할 때의 스트림 변환을 개념적으로 설명합니다.

  1. A 지점에서 이벤트 스트림이 창 연산자로 입력됩니다.

  2. B 지점에서 창 연산자가 창 스트림을 생성합니다. 각 창에는 이벤트 집합이 포함됩니다. 이러한 이벤트의 수명은 입력 정책에 따라 변경되었습니다. 이벤트 스트림은 집계 등의 집합 기반 연산자나 사용자 정의 연산자로 입력됩니다.

  3. C 지점에서 집합 기반 연산자가 각 창을 처리하고 이벤트 스트림을 출력으로 생성합니다.

    • 집계의 경우 각 집합에 대해 이벤트가 하나씩 작성됩니다(창이 비어 있으면 이벤트가 작성되지 않음). 집계에서는 스칼라 값만 지정하므로 출력 이벤트의 수명은 기본적으로 창 시간 범위로 설정됩니다. 이는 기본 제공 집계와 사용자 정의 집계 결과에 모두 적용됩니다.

    • 사용자 정의 연산자 및 TopK의 경우에는 0개 이상의 이벤트가 생성됩니다. 시간이 중요한 UDO는 출력 이벤트 수명도 지정합니다. 시간이 중요하지 않은 UDO 및 TopK 연산자의 경우 출력 이벤트의 수명은 기본적으로 창 시간 범위로 설정됩니다.

  4. D 지점에서 출력 정책을 출력 이벤트에 적용할 수 있습니다. 따라서 쿼리 만든 이가 이벤트의 임시 속성을 수정하고 집합 기반 연산자에서 생성한 기본 수명 값을 재정의할 수 있습니다.

프로그래밍 측면으로 볼 때 그림에서 세 흰색 상자는 창 연산자에 대한 매개 변수로 매니페스트됩니다.

창 정책

창 연산자가 작성하는 창 스트림은 집합 기반 연산의 필수 입력입니다. 시간 또는 개수의 측면에서 창 자체를 정의하는 것 이외에도, 쿼리 작성자는 1) 기간 이동 연산자가 집합 기반 연산에 전달될 때 창에 포함되는 이벤트의 수명에 영향을 주는 방법과 2) 연산의 결과 이벤트 수명을 조정하는 방법에도 영향을 줄 수 있습니다.

이 두 정책은 창 위의 UDO 또는 집계의 기본 타임스탬프를 제어하거나 재정의하기 위해 쿼리 작성자가 창 연산자의 일부분으로 지정할 수 있습니다.

입력 정책

이 릴리스에서 StreamInsight는 창에 있는 이벤트의 시작 시간과 종료 시간을 모두 창 시작 시간과 종료 시간에 맞게 자르는 단일 입력 정책을 지원합니다. 즉, 시간이 중요한 모든 집합 기반 연산은 입력 정책이 적용되기 전에 원래 이벤트가 창 외부에서 겹친 경우에도 창 내부의 이벤트 타임스탬프만 인식합니다.

입력 정책은 선택 사항입니다. 편의상 클래스 WindowInputPolicy는 해당 인스턴스(WindowInputPolicy.ClipToWindow)를 반환하는 정적 속성을 제공합니다.

출력 정책

이 릴리스에서 StreamInsight는 다음과 같은 출력 정책을 지원합니다.

  • 스냅숏 창: 결과 이벤트의 종료 시간은 창 종료 시간에 맞게 잘립니다.

  • 도약 창은 다음 두 가지 출력 정책을 지원합니다.

    • 결과 이벤트는 창 종료 시간에 맞춰 조절되는 시점 이벤트입니다.

    • 결과 이벤트의 종료 시간은 창 종료 시간에 맞게 잘립니다.

  • 개수 창: 결과 이벤트가 창 끝에서 시점 이벤트로 전환됩니다.

각 창 유형마다 별도의 출력 정책 클래스가 있습니다. 편의상 각 출력 정책 클래스는 해당 인스턴스를 반환하는 정적 속성을 제공합니다.

  • SnapshotWindowOutputPolicy.Clip(지정하지 않은 경우의 기본값)

  • HoppingWindowOutputPolicy.ClipToWindowEnd

  • HoppingWindowOutputPolicy.PointAlignToWindowEnd(지정하지 않은 경우의 기본값)

  • CountWindowOutputPolicy.PointAlignToWindowEnd(지정하지 않은 경우의 기본값)

아래에서는 사용 가능한 모든 창과 이러한 창이 집합 기반 연산의 결과에 가져오는 영향을 간략하게 보여 줍니다.

스냅숏 창:

출력 정책: 항상 "창 끝에 맞게 자르기"

출력 수명:

ClipToWindowEnd

기본 제공 집계

창 크기

TopK

창 크기

시간이 중요하지 않은 UDA

창 크기

시간이 중요하지 않은 UDO

창 크기

시간이 중요한 UDA/UDO

스냅숏 창에는 해당되지 않음

도약 창:

출력 정책: "창 끝에 맞게 자르기" 또는 "PointAlignToWindowEnd"

출력 수명:

ClipToWindowEnd

PointAlignToWindowEnd

기본 제공 집계

창 크기

창 끝에서 지정

TopK

창 크기

창 끝에서 지정

UDA

창 크기

창 끝에서 지정

UDO

창 크기

창 끝에서 지정

시간이 중요한 UDO

반환된 수명, 창 끝에 맞게 자르기

창 끝에서 지정

개수 창:

출력 정책: 항상 "창 끝에서 지정"

출력 수명:

PointAlignToWindowEnd

기본 제공 집계

개수 창에는 해당되지 않음

TopK

개수 창에는 해당되지 않음

UDA

창 끝에서 지정

UDO

창 끝에서 지정

시간이 중요한 UDO

창 끝에서 지정

참고 항목

개념

집계

TopK

사용자 정의 집계 및 연산자