[Clickhouse] Materialized View

Materialized View๋Š” ํšจ๊ณผ์ ์ธ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ๋ณด์กฐ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋‹ค.
๋ฏธ๋ฆฌ ์›ํ•˜๋Š” ํ˜•ํƒœ๋Œ€๋กœ ์กฐํšŒ์šฉ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Incremental Materialized View์™€ Refreshable Materialized View 2๊ฐ€์ง€๊ฐ€ ์ง€์›๋œ๋‹ค.




๋™์ž‘ ๊ตฌ์กฐ

์ด๊ฒŒ ๋ญ๋ƒ๋ฉด, ๋ทฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ด๋‘๋ฉด clickhouse๊ฐ€ ์ž๋™์œผ๋กœ ๊ทธ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ€์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

https://clickhouse.com/docs/materialized-view/incremental-materialized-view
๊ทธ๋•Œ๊ทธ๋•Œ ๋“ค์–ด์˜จ ๊ฐ’์— ๋Œ€ํ•ด์„œ๋งŒ ์ง‘๊ณ„ ์—ฐ์‚ฐ์„ ํ•ด์„œ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์— ๋ถ€์–ด์ค€๋‹ค.
View INSERT์— ๋”ฐ๋ฅธ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ, ๊ทธ๋Œ€์‹  ํ•ด๋‹น View ์ ‘๊ทผ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ๋Š” ๋งค์šฐ ๊ทน์ ์ธ ์ตœ์ ํ™” ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

Incremental๊ณผ Refreshable์˜ ์ฐจ์ด๋Š” INSERT ๋ ๋•Œ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„์œผ๋กœ View๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ์ผ์ • ๊ธฐ๋ฐ˜์œผ๋กœ ๋А๊ธ‹ํ•˜๊ฒŒ View๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ์ง€๋‹ค.
Refreshable์˜ ๊ตฌ์กฐ๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

https://clickhouse.com/docs/materialized-view/refreshable-materialized-view
์ด๊ฑด ์ผ์ •๋งˆ๋‹ค ์ „์ฒด์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค์„œ ๋„ฃ๋Š”๊ฑฐ๋ผ์„œ, Incremental์— ๋น„ํ•ด ๋ถ€ํ•˜๊ฐ€ ์ข€ ํฌ๋‹ค.




SummingMergeTree ์—”์ง„

View ๊ธฐ๋Šฅ์€ ์—„๋ฐ€ํ•˜๊ฒŒ๋Š” ๊ทธ ์ž์ฒด๋กœ ์™„์„ฑ๋œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ๋‹ค.
๋ณ„๋„์˜ View ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ ๊ฑฐ๊ธฐ์— ๋ถ€์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š”๊ฒŒ Materialized View์˜ ๋™์ž‘์ด๋‹ค.

View ์ €์žฅ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์„ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด SummingMergeTree๋ผ๋Š” ์—”์ง„์ด๋‹ค.

์ด๋Ÿฐ ์ง‘๊ณ„ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด


๊ทธ ๊ตฌ์กฐ์— ๋งž์ถฐ์„œ ํ…Œ์ด๋ธ”์„ ์งœ์ฃผ๋ฉด ๋œ๋‹ค.




View ์ ์šฉ (Incremental)

๋ทฐ ์ƒ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

CREATE MATERIALIZED VIEW ๋ทฐ์ด๋ฆ„ TO ๋Œ€์ƒํ…Œ์ด๋ธ” AS
SELECT ์ฟผ๋ฆฌ...

๊ทธ๋Ÿผ ๋ทฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ, ์œ ์˜ํ•  ์ ์€ ๋ทฐ๋„ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์กฐํšŒ๋„, ์‚ญ์ œ ๋ฐฉ๋ฒ•๋„ ๊ฐ™๋‹ค.

์—ฌ๊ธฐ์„œ์˜ ๋ฌธ์ œ๋Š”, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ๊ฑฐ๋‚˜ ํ•˜์ง„ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. INSERT์— ๋ฐ˜์‘ํ•ด์„œ ์˜ฎ๊ฒจ์ค€๋‹ค.
๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ์ˆ˜๋™์œผ๋กœ ์ฟผ๋ฆฌ ๋‚ ๋ ค์„œ ํ•œ๋ฒˆ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

์ดํ›„๋ถ€ํ„ฐ ๋“ค์–ด์˜ค๋Š” INSERT์— ๋Œ€ํ•ด์„œ๋Š” ์ž๋™์œผ๋กœ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฝ์ž…๋œ๋‹ค.

์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ๊ฑฐ๋ผ๋ฉด ์ด Incremental ๋ฐฉ์‹์ด ํ›จ์”ฌ ๋ฆฌ์†Œ์Šค ํšจ์œจ์ ์ด๊ณ  ๊ถŒ์žฅ๋˜๋Š” ํŽธ์ด๋‹ค.




Refreshable Materialized View

REFRESH View๋Š” ์‚ฌ์šฉ๋ฒ•์ด ํฌ๊ฒŒ ๋‹ค๋ฅด์ง„ ์•Š๊ณ , Refresh ์ ˆ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

CREATE MATERIALIZED VIEW ๋ทฐ์ด๋ฆ„
REFRESH ์ผ์ •
TO ๋Œ€์ƒํ…Œ์ด๋ธ” AS
SELECT ...

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ๊ฒฝ์šฐ์—๋„ 10๋ถ„๋งˆ๋‹ค ๋™๊ธฐํ™”๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑด ์ฃผ๊ธฐ๋งˆ๋‹ค ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ ๋„ฃ๋Š”๊ฑฐ๋ผ์„œ, Incremental๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ด์ „์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋„ ํ•œ๋ฒˆ์— ๋™๊ธฐํ™”๊ฐ€ ๋œ๋‹ค.

๋‹ค๋งŒ ๋Œ€์ฒด๋กœ๋Š” Incremental์— ๋น„ํ•ด ๋น„ํšจ์œจ์ ์ธ ํŽธ์ด๋‹ค.

์ •ํ•ฉ์„ฑ ๊ฐ™์€๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฑฐ๋‚˜, ์ด๋Ÿฐ ์ผ์ • ์ฃผ๊ธฐ ๊ธฐ๋ฐ˜์˜ ์ง‘๊ณ„๊ฐ€ ํšจ์œจ์ ์ธ ๊ฒฝ์šฐ์— ์ฐจ์„ ์ฑ…์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.



์ฐธ์กฐ
https://clickhouse.com/docs/materialized-view/incremental-materialized-view
https://clickhouse.com/docs/materialized-view/refreshable-materialized-view