SimpleAggregateFunction 데이터 타입은 집계 함수의 중간 상태를 저장하지만, AggregateFunction
타입처럼 전체 상태를 저장하지는 않습니다.
이 최적화는 다음 속성을 만족하는 함수에 적용할 수
있습니다:
행 집합 S1 UNION ALL S2에 함수 f를 적용한 결과는
행 집합의 각 파트에 f를 개별적으로 적용한 뒤, 그 결과에 다시
f를 적용해 얻을 수 있습니다: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)).
이 속성은 부분 집계 결과만으로도 결합된 결과를 계산하는 데 충분하다는
것을 보장하므로, 추가 데이터를 저장하거나 처리할 필요가 없습니다. 예를
들어 min 또는 max 함수는 중간 단계의 결과만으로 최종 결과를
추가 단계 없이 계산할 수 있지만, avg 함수는 합계와 개수를 함께
추적해야 합니다. 그런 다음 중간 상태를 결합하는 최종 Merge 단계에서
이 값을 나누어 평균을 계산합니다.
집계 함수 값은 일반적으로 함수 이름 뒤에 -SimpleState combinator를 붙여
집계 함수를 호출하면 생성됩니다.
SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)
매개변수
aggregate_function_name - 집계 함수 이름입니다.
유형 - 집계 함수 인수의 타입입니다.
다음 집계 함수가 지원됩니다.
SimpleAggregateFunction(func, 유형)의 값은 모두 동일한 유형이므로,
AggregateFunction 유형과는 달리
-Merge/-State 컴비네이터를 적용할 필요가 없습니다.SimpleAggregateFunction 유형은 동일한 집계 함수에서 AggregateFunction보다
더 나은 성능을 제공합니다.
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;