← 학습 카테고리

Learn

ClickHouse

47개 모듈 · 현재 29번째

ClickHouse 모듈 29/47 clickhouse-learn-29

TTL ... GROUP BY — 삭제 대신 요약 행으로 다운샘플링

ClickHouse ON CLUSTER 분산 DDL 및 TTL GROUP BY 공식 문서 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(sql-reference/distributed-ddl, guides/developer/ttl) ClickHouse 공식 문서 Using TTL to manage data lifecycle

이 모듈을 다 읽으면

  • TTL GROUP BY가 일반 TTL DELETE와 근본적으로 다른 지점을 설명할 수 있다
  • GROUP BY 컬럼이 PRIMARY KEY의 접두사여야 하는 제약의 이유를 설명할 수 있다

clickhouse-learn-12에서 다룬 TTL(자동 만료)을 전제로, 오래된 상세 데이터를 통째로 지우는 대신 더 거친 단위로 미리 집계한 요약 행 하나로 압축해 남겨두는 TTL ... GROUP BY를 정리한다.

삭제가 아니라 '뭉쳐서 요약'한다

일반 TTL은 조건을 만족한 행을 통째로 지우지만, TTL ... GROUP BY는 만료 대상 행들을 지정한 컬럼 기준으로 그룹화한 뒤 집계 함수(max/sum/avg 등)를 적용해, 원본의 여러 상세 행을 요약 행 하나로 대체한다 — '일정 시간이 지나면 지우되, 리포팅에 쓸 일부 정보는 남겨두고 싶다'는 요구를 만족시키는 방식이다.

핵심 포인트

  • 일반 TTL: 조건 만족 행을 통째로 삭제. TTL GROUP BY: 만료 대상 행들을 그룹화해 집계 함수로 요약 행 하나로 대체
  • '일정 시간 후 삭제하되 리포팅용 일부 정보는 남기고 싶다'는 요구에 맞는 방식

문법 — TTL 만료 조건에 GROUP BY와 SET을 함께

문법은 TTL timestamp + INTERVAL 기간 GROUP BY 그룹화컬럼들 SET 집계결과컬럼 = 집계함수(원본컬럼) 형태를 따른다. 공식 문서의 hits 테이블 예제는 사용자ID와 일자별로 그룹화해 max(max_hits), sum(sum_hits)처럼 이미 집계된 값을 다시 집계하는 방식으로, 하루 지난 상세 히트 데이터를 사용자·일자별 요약 하나로 압축해 수백만 개의 개별 레코드 없이도 과거 트렌드 분석이 가능하게 해준다.

핵심 포인트

  • 문법: TTL timestamp + INTERVAL 기간 GROUP BY 그룹화컬럼 SET 결과컬럼 = 집계함수(원본컬럼)
  • 공식 예제: 사용자ID+일자로 그룹화해 max(max_hits)/sum(sum_hits) 형태로 하루 지난 상세 데이터를 요약 하나로 압축

제약 — GROUP BY 컬럼은 PRIMARY KEY의 접두사여야 한다

공식 문서는 TTL 절의 GROUP BY 컬럼이 반드시 PRIMARY KEY의 접두사여야 한다고 명시한다 — clickhouse-learn-03에서 다룬 것처럼 ClickHouse의 물리적 정렬·인덱스 구조가 PRIMARY KEY(ORDER BY) 순서를 따르기 때문에, 만료 처리 시 그룹화가 이 물리적 정렬 순서와 어긋나지 않아야 효율적으로 처리할 수 있다는 제약이다. 이 덕분에 상세 데이터는 최근 구간만 유지하고, 오래된 구간은 더 거친 시간 단위(시간별→일별 등)로 다운샘플링해 저장 비용을 크게 줄이면서도 과거 데이터의 분석 가치는 완전히 잃지 않는 실무 패턴이 가능해진다.

핵심 포인트

  • GROUP BY 컬럼은 반드시 PRIMARY KEY의 접두사여야 함 — 물리적 정렬 순서(ORDER BY)와 그룹화가 어긋나면 안 되기 때문
  • 최근 구간은 상세 유지, 오래된 구간은 더 거친 단위로 다운샘플링 — 저장 비용 절감+과거 데이터의 분석 가치 보존을 동시에 달성하는 실무 패턴