SummingMergeTree 不能累加
发布于 2 个月前 作者 huaxiaoer 341 次浏览 来自 问答

建表语句: 主键:gmt,name 对 a列做累加

create table t (gmt Date, name String, a UInt16, b UInt16) ENGINE=SummingMergeTree(gmt, (gmt, name), 8192, (a))

插入数据:

insert into t (gmt, name, a, b) values (‘2017-07-10’, ‘a’, 1, 2), (‘2017-07-10’, ‘b’, 2, 1), (‘2017-07-11’, ‘b’, 3, 8), (‘2017-07-11’, ‘b’, 3, 8), (‘2017-07-11’, ‘a’, 3, 1), (‘2017-07-12’, ‘c’, 1, 3)

手动触发merge

optimize table t

预期结果 2017-07-11,‘b’ 这两条数据应该要合并的: ┌─────gmt─┬name┬a┬─b┐ │ 2017-07-10 │ a │ 1 │ 2 │ │ 2017-07-10 │ b │ 2 │ 1 │ │ 2017-07-11 │ a │ 3 │ 1 │ │ 2017-07-11 │ b │ 6 │ 8 │ │ 2017-07-12 │ c │ 1 │ 3 │ └────────┴───┴─┴──┘

实际上并没有合并,结果: ┌───-─gmt─┬name┬a┬─b─┐ │ 2017-07-10 │ a │ 1 │ 2 │ │ 2017-07-10 │ b │ 2 │ 1 │ │ 2017-07-11 │ a │ 3 │ 1 │ │ 2017-07-11 │ b │ 3 │ 8 │ │ 2017-07-11 │ b │ 3 │ 8 │ │ 2017-07-12 │ c │ 1 │ 3 │ └────────┴───┴─┴──┘

是怎么回事呢?

5 回复

插入新数据再执行会合并

你最后将 a 那一列设置为总计列数参数了,他应该就不删除了吧

@gujiashuai 我后面又加了些数据,不知道什么时候, 他就合并了。

@mayday 是的, 我后面没管那么多,加了很多数据后,他就自动合并了。但是这样在实际使用中我就不知道数据是否合并了。

只有在表的 part 进行合并的时候, 才会进行合并.

文档如下:

The difference is that when merging data parts for SummingMergeTree tables ClickHouse replaces all the rows with the same primary key with one row which contains summarized values for the columns with the numeric data type

回到顶部