只需要根据GROUP BY条件得到汇总结果(SUM),不关心明细数据。解决存储和查询的开销。
特点
- 使用ORDER BY排序键作为聚合汇总的条件Key。
- 以分区为单位进行聚合,只在分区合并时触发。
- 如果指定了columns汇总列,则SUM汇总在这些列字段。
- 如果未指定columns汇总列,则SUM汇总在所有非主键的数值类型字段。
- 如果ORDER BY和PRIMARY KEY的字段不相同,PK列字段必须是ORDER BY的前缀,即ORDER BY(B, C) PRIMARY KEY A不合法。
- 非聚合字段,使用第一行数据的取值。
使用
CREATE TABLE summing_table
(
id String,
code String,
v1 UInt32,
v2 Float64,
time DateTime
) ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(time)
ORDER BY (id, code)
PRIMARY KEY id;
INSERT INTO summing_table
VALUES ('001', 'C1',10,20, toDateTime('2021-09-21 14:00:00')),
('001', 'C1',20,30, toDateTime('2021-09-22 15:00:00')),
('001', 'C2',20,10, toDateTime('2021-09-22 17:00:00')),
('001', 'C2',10,10, toDateTime('2021-10-01 19:00:00')),
('002', 'C3',30,20, toDateTime('2021-10-03 15:00:00'));
SELECT * FROM summing_table;