Share via


개수 창

개수 창은 특정한 시간 기간 내에 속하면서 해당 기간 동안 집계와 같은 집합 기반 계산 몇 가지를 수행할 수 있는 이벤트의 하위 집합을 정의합니다. 스냅숏 창과 마찬가지로 개수 창에는 고정된 창 크기가 적용되지 않습니다. 창 크기는 포함된 이벤트의 수에 따라 정의됩니다. 따라서 이벤트 빈도가 불규칙한 스트림에서 특정한 수의 이벤트에 집합 기반 연산을 적용해야 하는 여러 시나리오에 사용할 수 있습니다.

팁

이 StreamInsight 버전에서는 개수 창에 사용자 정의 집계 또는 사용자 정의 연산자만 사용할 수 있으며 기본 제공 집계 및 TopK는 사용할 수 없습니다.

이벤트 창에 대한 일반적인 설명과 StreamInsight에서의 구현 및 사용법에 대해서는 이벤트 창 사용을 참조하십시오.

개수 창 이해

개수 창의 가변 창 크기는 시간대를 따른 고유 이벤트 시작 시간 개수로 정의됩니다. 개수가 N인 개수 창 집합은 연속하는 N개의 이벤트 시작 시간을 포함하는 모든 시간 범위로 정의됩니다. 여기서 N은 최소 1 이상입니다. 즉, 이러한 각 시간 범위는 시작 시간에 N번째 고유 이벤트의 틱 1개를 더한 시점에서 종료됩니다. 개수 창은 고유한 각 이벤트 시작 시간과 함께 시간대를 따라 이동합니다. 그러므로 새 이벤트 시작 시간을 정의하는 각각의 새 이벤트가 발생할 때 개수가 채워지면 새 개수 창이 작성됩니다. 즉, 고유 이벤트 시작 시간 수가 N보다 작으면 새 창은 작성되지 않습니다. 도약 창과 마찬가지로 개수 창 간의 오프셋도 도약 크기라고 하지만, 도약 창과는 달리 일반적으로 개수 창의 도약 크기는 상수가 아닙니다.

시간대의 각 이벤트에 고유한 타임스탬프가 있으면 해당 창의 이벤트 수가 N과 같습니다. 여러 이벤트의 이벤트 시작 시간이 동일한 경우에는 포함된 이벤트의 수가 N보다 큽니다. 창에 집계를 적용할 때 이 동작을 이해하는 것이 중요합니다.

다음 그림에서는 세 개의 이벤트(e1, e2, e3)가 포함된 스트림을 보여 줍니다. 세로 막대에는 이러한 이벤트로 정의되는 개수 창 경계가 표시됩니다. 연한 파란색 이벤트 스트림은 시간에 따라 이동하는 이벤트 스트림을 나타냅니다. 주황색 상자에는 개수 창과 각 창에 포함된 이벤트가 표시됩니다. 처음 두 개의 고유 이벤트 시작 시간은 e1 및 e2에 속하며 첫 번째 개수 창은 e1의 시작 시간에서 시작하여 e2의 시작 시간에 1개 틱을 더한 시간에 종료합니다. 두 번째 창에는 e2 및 e3의 시작 시간이 포함됩니다.

이벤트 개수 창입니다.

이 그림에서는 창 입력 정책으로 이미 잘린 창의 이벤트를 보여 줍니다. 모든 StreamInsight 창과 마찬가지로 입력 정책은 이벤트를 창 크기로 자르기 위한 것입니다. 시간이 중요한 집계 또는 연산자는 원래 이벤트가 아니라 이렇게 잘린 이벤트 수명을 창에서 사용합니다.

다음 그림에서는 단일 시간 인스턴트에 대해서만 유효한 시점 이벤트가 있는 개수 창을 보여 줍니다. 이 그림을 통해 CountByStartTimeWindow() 메서드가 이벤트 자체가 아닌 고유 이벤트 시작 시간 개수를 계산함을 확인할 수 있습니다. 이 그림에는 시점 이벤트 스트림이 나와 있습니다. 세로 막대에는 시점 이벤트로 정의되는 개수 창 시작 시간이 표시됩니다. 연한 파란색 이벤트 스트림은 시간에 따라 이동하는 이벤트 스트림을 나타냅니다. 두 이벤트는 동시에 배치됩니다. 주황색 상자에는 개수 창과 각 창에 포함된 이벤트가 표시됩니다. 배치된 두 이벤트는 창 매개 변수 N과 관련하여 한 단위로 계산됩니다.

개수 창입니다.

시점 이벤트의 경우 창 종료 시간을 정의할 때 N 번째 이벤트의 시작 시간에 틱 1개를 추가하는 창의 동작으로 인해 창에서 해당 이벤트를 모두 완전히 통합하게 됩니다.

개수 창 정의

개수 창은 시간대를 따른 고유 이벤트 시작 시간 개수로 정의됩니다. 다음 예와 같이 개수 창은 LINQ(통합 언어 쿼리)에서 지정됩니다. 입력 정책은 항상 ClipToWindow이며 출력 정책은 항상 PointAlignToWindowEnd입니다.

var agg = from w in inputStream.CountByStartTimeWindow(10)
          select new { sum = w.MySum(e => e.i) };

현재는 개수 창에 기본 제공 집계를 사용할 수 없으므로 위의 예에서는 사용자 정의 집계인 MySum을 사용합니다.

그 외 다른 창의 경우 이 창의 출력 정책이 집합 기반 연산의 결과에 적용됩니다. 개수 창에 사용할 수 있는 유일한 출력 정책은 창이 끝날 때 시점 이벤트를 생성하는 정책입니다. 지점 시간의 타임스탬프는 창의 마지막 이벤트의 시작 시간과 일치합니다. 즉, 시점 이벤트는 여전히 창 범위 내에 있습니다. 위 다이어그램의 입력에 대한 집계를 적용하면 출력 스트림의 모양은 다음과 같습니다.

집계 결과를 포함한 개수 창입니다.

UDO가 타임스탬프를 포함한 결과 이벤트를 생성할 수 있는 시간이 중요한 UDO(사용자 정의 연산자)의 경우는 출력 정책이 타임스탬프를 덮어씁니다. UDO에서 반환하는 각 이벤트는 창이 끝날 때 시점 이벤트로 변환되므로 앞의 다이어그램에 나온 집계의 단일 결과 이벤트와 마찬가지로 지점은 창의 마지막 이벤트의 시작 시간과 맞춰집니다.

참고 항목

개념

집계

TopK

사용자 정의 집계 및 연산자

도약 창

스냅숏 창