用途:指导在 ClickHouse 中用物化视图构建实时数据聚合与转换管道。物化视图是增量触发器,只处理新到达的数据,适合流式分析、实时看板和持续聚合,无需定时批处理任务。
主要能力:支持三种模式——增量视图(最常用,处理新数据)、可刷新视图(按计划整体重算,语法 CREATE MATERIALIZED VIEW ... REFRESH EVERY 1 HOUR AS ...)、POPULATE 视图(创建时回填已有数据,大表慎用)。目标表引擎可选 SummingMergeTree(COUNT/SUM/AVG 简单聚合)、AggregatingMergeTree(配合 uniq、quantile、topK 等复杂聚合,存中间状态)、ReplacingMergeTree(去重与实体更新)、MergeTree(存原始事件)。复杂聚合使用 State/Merge 函数对,如 uniq() ↔ uniqState()/uniqMerge()、quantile(0.95)() ↔ quantileState(0.95)()/quantileMerge(0.95)()。可链式建视图做多级聚合(小时→天→月),减少重复计算。
使用方式:先建源表,再建目标聚合表,最后建物化视图指向目标表;向源表 INSERT 即自动更新聚合结果。设计时控制 GROUP BY 基数、按常见查询过滤设计 ORDER BY、用 countIf/sumIf 做条件聚合。修改聚合逻辑建议新建带版本号的视图并逐步迁移,避免对目标表 ALTER。回填历史数据可直接 INSERT 到目标表,或对空表用 POPULATE。
适用场景:实时看板指标、用户分群、多目标路由、漏斗分析、时间序列降采样、Kafka 流式管道。
限制:不适合低频批处理、聚合逻辑频繁变更或源数据小且查询已很快的场景;POPULATE 在大源表上可能很慢;物化视图较难修改。要求 ClickHouse 20.6+(基础)、21.9+(可刷新)、22.0+(高级 State/Merge);查询可用 pip install clickhouse-driver。具体版本与性能数据以官方资料为准。