1.介绍
求和引擎继承自 MergeTree。区别在于,当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值。如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度。
2.建表语句
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = SummingMergeTree([columns])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
columns - 包含了将要被汇总的列的列名的元组。可选参数。
所选的列必须是数值类型,并且不可位于主键中。
3.示例
#本地表
create table temp.summing_table_test1 on cluster ck_cluster
(
v1 Int32,
v2 Int32,
name String,
total_date DateTime
) ENGINE = SummingMergeTree((v1,v2))
order by (name)
partition by toDate(total_date)
SETTINGS index_granularity = 8192;
写入测试数据:
insert into temp.summing_table_test1
values (1,2,'a',now()),(2,2,'a',now()-1*60*60),(3,4,'b',now());
查询数据:
SELECT *
FROM temp.summing_table_test1
Query id: 2da82c96-2a90-496a-83fe-8a6528ba336c
┌─v1─┬─v2─┬─name─┬──────────total_date─┐
│ 3 │ 4 │ a │ 2021-10-13 11:41:12 │
│ 3 │ 4 │ b │ 2021-10-13 11:41:12 │
└────┴────┴──────┴─────────────────────┘