집계
이 항목의 예에서는 이벤트 창에 대해 집계 연산을 수행하는 방법을 보여 줍니다. 지원되는 집계 함수는 다음과 같습니다.
숫자 페이로드 필드 평균(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) };