SimpleAggregateFunction 데이터 타입

SimpleAggregateFunction 데이터 타입

집계 함수의 중간 상태를 저장하되, AggregateFunction 타입처럼 전체 상태를 저장하지는 않는 데이터 타입이에요. 부분 집계 결과만으로도 결합된 결과를 계산할 수 있는 함수들에 적용할 수 있는 최적화예요.

출처: 문서

본문

설명 (Description)

SimpleAggregateFunction 데이터 타입은 집계 함수의 중간 상태를 저장하지만, 그 전체 상태를 AggregateFunction 타입처럼 저장하지는 않아요. 이 최적화는 다음 속성이 성립하는 함수에 적용할 수 있어요.

행 집합 S1 UNION ALL S2에 함수 f를 적용한 결과는, 행 집합의 각 부분에 f를 별도로 적용한 다음 다시 결과에 f를 적용해 얻을 수 있다: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)).

이 속성은 부분 집계 결과만으로 결합된 결과를 계산하기에 충분함을 보장하므로, 추가 데이터를 저장하고 처리할 필요가 없어요. 예를 들어 min 또는 max 함수의 결과는 중간 단계에서 최종 결과를 계산하는 추가 단계가 필요 없지만, avg 함수는 합(sum)과 개수(count)를 추적해야 해요. 그것들은 중간 상태를 결합하는 최종 Merge 단계에서 나눠 평균을 구해요. 집계 함수 값은 보통 함수 이름 뒤에 -SimpleState 컴비네이터를 붙인 집계 함수를 호출해 만들어져요.

문법 (Syntax)

SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)

매개변수 (Parameters)

  • aggregate_function_name — 집계 함수의 이름.
  • Type — 집계 함수 인자들의 타입.

지원되는 함수 (Supported functions)

다음 집계 함수들이 지원돼요.

SimpleAggregateFunction(func, Type)의 값은 같은 Type을 가지므로, AggregateFunction 타입과 달리 -Merge/-State 컴비네이터를 적용할 필요가 없어요. SimpleAggregateFunction 타입은 같은 집계 함수에 대해 AggregateFunction보다 더 나은 성능을 보여줘요.

예시 (Example)

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;

더 알아보기 (Learn more)