物化视图预聚合(ClickHouse 示例)
物化视图预聚合(ClickHouse 示例)
-- 明细表:按 (tenant, ts) 排序,支撑明细查询
CREATE TABLE logs.events (
tenant String, ts DateTime, service LowCardinality(String),
ok UInt8, latency_ms UInt32
) ENGINE = MergeTree ORDER BY (tenant, ts);
-- 物化视图:写入时增量维护分钟级聚合
CREATE MATERIALIZED VIEW logs.events_1m
ENGINE = SummingMergeTree ORDER BY (tenant, service, minute)
AS SELECT tenant, service, toStartOfMinute(ts) AS minute,
count() AS cnt, sum(ok) AS ok_cnt, avg(latency_ms) AS latency_avg
FROM logs.events GROUP BY tenant, service, minute;| 宽表 | 把维度冗余进事实表,查询不做 join;更新维度要回填 |
|---|---|
| 星型模型 | 维表独立、更新简单;查询 join 成本高,适合能缓存 join 结果的场景 |
| 预聚合 | 物化视图/汇总表;查询快,口径要与明细保持一致并版本化 |
预聚合的口径要写清楚(去重方式、时区、含不含迟到数据):口径含糊的汇总表会在对账时与明细打架。