개발/기술

Clickhouse Materialized views

kwony 2025. 11. 7. 22:41

테이블에 데이터가 추가될 때마다 특정한 쿼리를 실행하고 결과를 target 테이블에 전송하는 테이블이다. 데이터가 추가될수록 결과가 타겟 테이블에 전송되고 중간 result 는 업데이트되고 병합된다. 병합된 결과는 기존 데이터에 대한 쿼리와 동등하다.

 

target 테이블에 미리 계산된 결과를 전달하고 싶을때 사용하는 테이블이라고 보면됨.

 

아래 up_down_votes_per_day_mv 테이블은 up_down_votes_per_day 테이블에 일별 데이터를 모아서 전송해주는 역할을 하는 materialized 테이블이다

CREATE MATERIALIZED VIEW up_down_votes_per_day_mv TO up_down_votes_per_day AS
SELECT toStartOfDay(CreationDate)::Date AS Day,
       countIf(VoteTypeId = 2) AS UpVotes,
       countIf(VoteTypeId = 3) AS DownVotes
FROM votes
GROUP BY Day

 

리얼타입에 데이터를 유입시킬 수 있으며 점진적으로 업데이트되는 인덱스와 비슷한 역할을 한다고 볼 수 있다. 다른 디비의 경우 materialized view 가 특정 상태의 snapshot 을 저장하고 새로고침을 해줘야 하는 것에 비해서 요건 클릭하우스 고유한 특징이라고 볼 수 있다.

 

별도의 애플리케이션 돌릴 필요 없이 테이블을 이용해서 데이터 전처리를 해줄 수 있는 테이블이라고 볼 수 있다. 여기에 Aggregate Engine 같은걸 이용하면 효율을 더 높일수도 있다.