설명
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 컴비네이터를 붙여
집계 함수를 호출하면 생성됩니다.
구문
SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)매개변수
aggregate_function_name- 집계 함수 이름입니다.유형- 집계 함수 인수의 타입입니다.
지원되는 함수
다음 집계 함수가 지원됩니다.
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
예시
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;