首页/数据/NoSQL 速查/SummingMergeTree 预聚合
ClickHouse56 条

SummingMergeTree 预聚合

SummingMergeTree 在合并时把排序键相同的行中的数值列做求和,实现轻量级预聚合:写入明细行,查询直接读聚合结果,减少数据量。

NoSQL 速查数据更新于 2026-10-12
引擎参数SummingMergeTree([columns]),不指定时对所有非排序键数值列求和
合并语义仅合并时生效、按排序键聚合;其余列取任意一行值(不确定)
读取兜底未合并数据仍有重复键,查询需 SUM + GROUP BY 或 FINAL

示例

示例
CREATE TABLE daily_sales
(
    d Date,
    shop_id UInt64,
    orders UInt64,
    amount Decimal(18, 2)
)
ENGINE = SummingMergeTree((orders, amount))
ORDER BY (d, shop_id);

INSERT INTO daily_sales VALUES (today(), 1, 1, 9.9), (today(), 1, 2, 19.8);

SELECT d, shop_id, sum(orders), sum(amount)
FROM daily_sales
GROUP BY d, shop_id;
它不维护中间聚合状态,适合可加性指标(计数、金额);平均值这类不可加指标应存分子分母或用 AggregatingMergeTree。

易错点

  • 排序键里出现高基数列会让合并几乎无收益,键要选聚合维度
  • 非求和列的值在合并后不确定,不要依赖它们做业务判断

数据来源与参考

  • ClickHouse Docs: SummingMergeTree
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌