ClickHouse物化视图与普通视图的本质区别是什么?
ClickHouse中物化视图(Materialized View)和普通视图在底层实现、数据存储、刷新机制方面有什么本质区别?请结合TO[DB].[TABLE]语法说明使用场景。
回答
Yahuda
普通视图:仅保存SQL定义,查询时展开,不存储任何数据,相当于宏替换。
物化视图:本质是一个触发器+目标表。
- 存储:物化视图背后真实存在一张目标表(隐式或通过TO指定),数据独立存储。
- 刷新机制:不是定期刷新,而是INSERT触发——当源表有新数据插入时,物化视图自动执行SELECT转换后写入目标表。
- TO指定目标表:
CREATE MATERIALIZED VIEW mv TO target_db.target_table AS SELECT ...可复用已有表结构,且目标表可附加MergeTree、SummingMergeTree等引擎。 - 使用场景:
- 预聚合(按天/小时汇总)
- 数据转置(宽表变窄表)
- 过滤清洗后落地
- 注意事项:
- 源表数据更新/删除不会同步到物化视图
- 不支持对物化视图的直接INSERT
- 多个物化视图可挂载到同一源表