Refreshable Materialized View — INSERT 트리거가 아니라 스케줄로 다시 계산한다
ClickHouse Refreshable Materialized View 및 HTTP/Native 인터페이스 공식 문서 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(concepts/features/materialized-views/refreshable-materialized-view, interfaces/tcp) ClickHouse 공식문서 Refreshable materialized view
이 모듈을 다 읽으면
- Refreshable MV가 clickhouse-learn-05의 일반 MV(INSERT 트리거)와 정반대 방식으로 동작한다는 것을 설명할 수 있다
- 각 방식이 어떤 집계 패턴에 적합한지 구분할 수 있다
clickhouse-learn-05에서 다룬 일반 Materialized View(INSERT가 들어올 때마다 즉시 그 블록만 처리)를 전제로, 이와 정반대로 전체 쿼리를 스케줄에 맞춰 통째로 다시 계산하는 Refreshable Materialized View를 정리한다.
일반 MV와 정반대 — 즉시 반응 vs 주기적 전체 재계산
clickhouse-learn-05에서 다룬 일반(incremental) Materialized View는 INSERT가 일어날 때마다 그 즉시 새로 들어온 블록만 처리해 대상 테이블에 반영한다 — 이게 '즉각 반응'하는 트리거 방식이다. REFRESH EVERY 1 MINUTE 같은 문법으로 만드는 Refreshable Materialized View는 이와 정반대다 — INSERT에 반응하지 않고, 지정한 스케줄마다 SELECT 쿼리 전체를 다시 실행해 그 결과로 데이터를 통째로 원자적으로 교체한다(APPEND/REPLACE 모드 지원).
핵심 포인트
- 일반 MV(module05): INSERT마다 그 즉시 새 블록만 처리(즉각 반응 트리거 방식)
- Refreshable MV: INSERT와 무관하게 REFRESH EVERY로 지정한 스케줄마다 전체 쿼리를 다시 실행해 결과를 원자적으로 교체(APPEND/REPLACE 모드)
언제 어느 쪽을 쓰는가 — 부분 처리 가능 여부가 기준
일반 incremental MV는 한 테이블 위의 집계처럼 '들어오는 블록 각각을 부분적으로 처리하고 그 중간 상태들을 나중에 합쳐도 되는' 경우에 강력하다 — 매번 전체 데이터를 다시 훑지 않고 새로 들어온 조각만 처리하면 되니 페타바이트 규모까지도 잘 확장된다. Refreshable MV는 이와 다른 상황에 적합하다 — 집계가 전체 데이터셋 전체에 의존하거나(예: 여러 테이블을 조인한 복잡한 집계), 증분 계산 자체가 실용적이지 않은 경우다. 즉 '한 조각씩 부분 계산해서 나중에 합칠 수 있는가'가 두 방식을 고르는 기준이다.
핵심 포인트
- 일반 incremental MV: 블록 단위 부분 처리+중간 상태 병합이 가능한 경우(단일 테이블 집계 등)에 강력, 페타바이트 규모까지 확장
- Refreshable MV: 집계가 전체 데이터셋에 의존하거나(복잡한 다중 테이블 조인 등) 증분 계산 자체가 비실용적인 경우에 적합