집계

이 항목의 예에서는 이벤트 창에 대해 집계 연산을 수행하는 방법을 보여 줍니다. 지원되는 집계 함수는 다음과 같습니다.

  • 숫자 페이로드 필드 평균(avg)

  • 페이로드 필드 합(sum)

  • 페이로드 필드의 최소값(min)

  • 페이로드 필드의 최대값(max)

  • 이벤트 수(count)

집계는 데이터 하위 집합에 대해 몇 가지 계산을 수행하는 집합 기반 작업입니다. 이러한 하위 집합은 이벤트 창으로 지정되어 시간대를 따라 이벤트를 그룹화합니다. 이 정의에 따르면 집계는 창에만 적용할 수 있으며 일반 이벤트 스트림에는 적용할 수 없습니다. 집계는 IQWindowedStreamable<T>에 대한 확장 메서드로 제공됩니다. 창에 대한 자세한 내용은 이벤트 창 사용을 참조하십시오.

참고

CEPStream<T> 스트림의 경우 집계가 CepWindowStream<T>에 대한 확장입니다. 입력 및 출력 어댑터 개발에 대한 자세한 내용은 입력 및 출력 어댑터(레거시 모델)를 참조하십시오. 이 항목의 설명은 두 스트림 유형 모두에 해당됩니다.

프로젝션 연산과 같은 구문을 사용하는 경우 집계 연산 결과는 스칼라 값 페이로드 필드가 됩니다. 창에 대한 집계는 증분 계산됩니다. 즉, 이벤트가 집계 창에 들어오거나 집계 창에서 나갈 떄 이전 집계 결과가 업데이트됩니다. 이 방식은 숫자의 정밀도에 영향을 줄 수 있습니다.

avg, sum, min 및 max는 모두 집계할 값을 나타내는 단일 입력 매개 변수를 사용합니다. 일반적으로 이 매개 변수는 이벤트 필드에 대한 참조입니다. 입력 매개 변수는 아래의 예와 같이 람다 식으로 지정됩니다. count 집계는 창의 전체 이벤트 개수를 계산하므로 매개 변수를 포함하지 않습니다.

Null 값 처리 방식은 Transact-SQL의 유사한 함수와 일치합니다.

  • sum에서는 Null이 0으로 처리됩니다.

  • min에서는 모든 값이 Null보다 작습니다.

  • max에서는 모든 값이 Null보다 큽니다.

  • TopK에서는 페이로드 필드에 따라 이벤트 순위가 매겨지므로 Null은 항상 모든 값보다 작습니다.

최소 및 최대 함수는 숫자, 문자(string) 또는 임시(datetime) 형식과 같은 비교자를 구현하는 모든 형식에 사용할 수 있습니다.

다음 예에서는 도약 창스냅숏 창에서 정의된 이벤트에 집계 함수를 적용하는 방법을 보여 줍니다. 이번 릴리스에서는 기본 제공 집계 또는 TopK에 개수 창을 사용할 수 없습니다.

A.도약 창에 대한 집계

도약 창은 시간이 지남에 따라 정기적인 기간 및 빈도로 반복됩니다. 예를 들어 다음 예와 같이 5분마다 계산을 다시 수행하여 1시간 동안의 이벤트 데이터를 집계하는 것이 도약 창에 해당합니다. 여기서 창 크기는 1시간이고 도약 크기는 5분입니다.

// Assuming the following input event type for inputStream:
public class MyPayload 
{ 
    public int i; 
    public float f; 
}
var avgHourly = from win in inputStream.HoppingWindow(TimeSpan.FromHours(1), TimeSpan.FromMinutes(5))
                  select new { hourlyavg = win.Avg(e => e.f) }; 

창 연산자가 입력 스트림에 적용되어 IQWindowedStreamable<T>를 생성합니다. 이 스트림의 각 요소 win은 이벤트가 포함된 창을 나타냅니다.

다음 예에서는 연속 창을 사용하여 1시간 내에 포함되는 이벤트 수를 계산합니다. 연속 창은 도약 크기가 창 크기와 같은 축소된 도약 창입니다.

var countHourly = from win in hourStream.TumblingWindow(TimeSpan.FromHours(1))
                  select new { count = win.Count() };

B.스냅숏 창에 대한 집계

다음 예에서 from 절은 inputStream 스트림에 대해 스냅숏 창을 적용합니다. 이 예에서 Sum 집계 결과는 e.i 페이로드 필드에 할당되고 Avg 집계 결과는 e.f 페이로드 필드를 기반으로 하여 계산됩니다. 또한 Count 집계도 사용됩니다. 이 예에서는 같은 문에서 여러 집계를 결합하는 방법도 보여 줍니다. 이러한 집계는 모두 같은 창에 대해 계산됩니다.

// Assuming the following input event type for inputStream:
public class MyPayload 
{ 
    public int i; 
    public float f; 
}

// Multiple aggregations over a snapshot window
var snapshotAgg = from w in inputStream.Snapshot()
                  select new { sum = w.Sum(e => e.i),
                               avg = w.Avg(e => e.f),
                               count = w.Count() };

복합 식에 집계를 포함할 수 있으며, 다음 예와 같이 하나의 식에 집계를 둘 이상 포함할 수 있습니다.

var result = from w in inputStream.Snapshot()
             select new { ratio = w.Sum(e => e.i) / w.Sum(e => e.f) };

참고 항목

개념

타임스탬프 수정

이벤트 창 사용

도약 창

개수 창

스냅숏 창