SummingMergeTree 테이블의 데이터 파트를 머지할 때 ClickHouse가 동일한 프라이머리 키(primary key), 더 정확히는 동일한 정렬 키를 가진 모든 행을 숫자 데이터 타입 컬럼의 값이 합산된 하나의 행으로 대체한다는 점입니다. 정렬 키가 하나의 키 값에 많은 수의 행이 대응되도록 구성되어 있으면 저장 용량이 크게 줄고 데이터 조회 속도도 빨라집니다.
이 엔진은 MergeTree와 함께 사용할 것을 권장합니다. 전체 데이터는 MergeTree 테이블에 저장하고, 예를 들어 보고서 작성 시에는 집계된 데이터를 저장하는 용도로 SummingMergeTree를 사용하십시오. 이렇게 하면 프라이머리 키를 잘못 구성해 중요한 데이터를 잃는 일을 방지할 수 있습니다.
테이블 생성하기
SummingMergeTree 매개변수
컬럼
columns - 값이 합산될 컬럼 이름을 담은 튜플입니다. 선택적 매개변수입니다.
해당 컬럼은 숫자형이어야 하며 파티션 또는 정렬 키(sorting key)에 포함되어서는 안 됩니다.
columns를 지정하지 않으면 ClickHouse는 정렬 키에 포함되지 않은 숫자 데이터 타입의 모든 컬럼 값을 합산합니다.
쿼리 절
SummingMergeTree 테이블을 생성할 때는 MergeTree 테이블을 생성할 때와 동일한 절이 필요합니다.
사용 예시
sum과 GROUP BY 절을 사용합니다.
데이터 처리
GROUP BY 절(clause)을 사용해야 합니다.
합산에 대한 일반 규칙
columns로 지정됩니다.
합산 대상인 모든 컬럼의 값이 0이면 해당 행은 삭제됩니다.
컬럼이 프라이머리 키(primary key)에 포함되지 않고 합산 대상도 아니면, 기존 값 중 하나가 임의로 선택됩니다.
프라이머리 키에 포함된 컬럼의 값은 합산되지 않습니다.
AggregateFunction 컬럼에서의 합산
중첩 구조
Map으로 끝나고, 다음 기준을 충족하는 컬럼을 최소 두 개 이상 포함하는 경우:
- 첫 번째 컬럼이 숫자형
(*Int*, Date, DateTime)또는 문자열(String, FixedString)이며, 이를key라고 합니다. - 나머지 컬럼이 산술형
(*Int*, Float32/64)이며, 이를(values...)라고 합니다.
key => (values...) 매핑으로 해석되며, 행을 머지할 때 두 데이터 집합의 요소는 key를 기준으로 머지되고 해당 (values...)는 합산됩니다.
예시:
Map 집계에 sumMap(key, value) 함수를 사용합니다.
중첩된 데이터 구조에서는 합산할 컬럼의 튜플에 해당 컬럼들을 지정할 필요가 없습니다.