설명
AggregateFunction 데이터 타입으로 저장하고
테이블에 보관할 수 있는 구현별 중간 상태가 있습니다. 이는 일반적으로
materialized view를 통해 수행됩니다.
AggregateFunction 타입과 함께 일반적으로 사용되는 집계 함수 조합자는
두 가지입니다:
-State집계 함수 조합자는 집계 함수 이름 뒤에 붙이면AggregateFunction중간 상태를 생성합니다.-Merge집계 함수 조합자는 중간 상태에서 집계의 최종 결과를 얻는 데 사용됩니다.
구문
aggregate_function_name- 집계 함수의 이름입니다. 함수가 매개변수형인 경우 해당 매개변수도 함께 지정해야 합니다.types_of_arguments- 집계 함수 인수의 타입입니다.
사용 방법
데이터 삽입
AggregateFunction 유형의 컬럼이 있는 테이블에 데이터를 삽입하려면,
집계 함수와
-State 집계
함수 조합자를 사용해 INSERT SELECT를 실행할 수 있습니다.
예를 들어, AggregateFunction(uniq, UInt64) 및
AggregateFunction(quantiles(0.5, 0.9), UInt64) 유형의 컬럼에 삽입하려면 다음과 같은
조합자가 적용된 집계 함수를 사용합니다.
uniq 및 quantiles와 달리 uniqState와 quantilesState는
(-State 조합자가 추가된 형태) 최종 값이 아니라 상태를 반환합니다.
즉, AggregateFunction 유형의 값을 반환합니다.
SELECT 쿼리 결과에서 AggregateFunction 유형의 값은
ClickHouse의 모든 출력 포맷에서 구현별 이진 표현을 가집니다.
입력 값으로부터 상태를 구성할 수 있도록 하는 특별한 세션 수준 설정 aggregate_function_input_format이 있습니다.
이 설정은 다음 포맷을 지원합니다:
state- 직렬화된 상태를 담은 바이너리 문자열(기본값)입니다. 예를 들어SELECT쿼리로 데이터를TabSeparated포맷으로 덤프한 경우, 이 덤프는INSERT쿼리를 사용해 다시 로드할 수 있습니다.value- 이 포맷은 집계 함수 인수의 단일 값 또는 인수가 여러 개인 경우 해당 값들의 튜플을 기대하며, 이를 역직렬화해 해당 상태를 구성합니다array- 이 포맷은 위의value옵션에 설명된 것처럼 값의 배열을 기대하며, 배열의 모든 요소를 집계해 상태를 구성합니다
데이터 선택
AggregatingMergeTree 테이블에서 데이터를 선택할 때는 GROUP BY 절과
데이터를 삽입할 때 사용한 것과 동일한 집계 함수를 사용하되,
-Merge 조합자를 사용합니다.
집계 함수에 -Merge 조합자를 추가하면 상태 집합을 받아
이를 결합한 뒤 전체 데이터 집계 결과를 반환합니다.
예를 들어, 다음 두 쿼리는 동일한 결과를 반환합니다:
사용 예시
- 블로그: ClickHouse에서 배열, 맵, 상태에 집계 조합자 적용하기
- MergeState 조합자.
- State 조합자.