Materialized View는 구체화된 뷰라는 의미를 가지고 있습니다.
데이터베이스에서 쿼리 결과를 미리 계산하여 실제 테이블 형태로 저장합니다.
ON COMMIT :
원본 테이블에 트랜잭션 커밋 발생 시 자동으로 Materialized View 갱신
데이터 정합성 실시간 가깝게 유지
성능 부담이 크므로 주로 소규모 데이터에 적합
ON DEMAND :
Refresh를 수동으로 수행
대량 데이터일 때 사용
CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
[ COPY GRANTS ]
( <column_list> )
[ <col1> [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1> , <cond_col1> , ... ) ]
[ WITH ] PROJECTION POLICY <policy_name>
[ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ , <col2> [ ... ] ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] AGGREGATION POLICY <policy_name> [ ENTITY KEY ( <col_name> [ , <col_name> ... ] ) ] ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
[ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
AS <select_statement>
출처 : https://docs.snowflake.com/ko/sql-reference/sql/create-materialized-view
이 중 중요한 것을 간추려 보자면
CREATE MATERIALIZED VIEW view_name
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT column1, column2
FROM source_table
WHERE condition;
이는 Oracle과 PostgreSQL 등에서 사용 가능한 기본 형태입니다.
Materialized View는 실시간 갱신이 빈번한 데이터에서 사용하기는 곤란하지만,
통계 혹은 BI적인 관점에서 데이터를 다룰 때 필요하다💡