学习ReplacingMergeTree引擎,首先你得了解clickhouse的MergeTree引擎,因为ReplacingMergeTree引擎是MergeTree引擎的一个扩展版引擎,他拥有和MergeTree一样的功能,同时新增了一个删除相同主键数据的功能。
我们知道,clickhouse的MergeTree引擎,是clickhouse众多引擎中,号称性能最好的一个引擎,但他只能按照分区删除数据,所以有些场景很难满足,或者说比较麻烦,不优雅,举个实际的例子:
比如有个系统,他的数据不是实时的,比如今天的数据,明天看会比今天多,后天看会比明天多,但你需要在你的系统中定时同步他的数据到clickhouse,
这种情况用MergeTree可以勉强实现,那就是把每天相同主键的数据都保存一条,查询的时候,只取最新的一条。但这个需要写sql解决,而且一旦查询复杂,设计到数据合并等,sql就会变的很复杂,查询效率也会降低,而且每天的数据都会重复保存,数据重复太多,量太大。
所以针对这种情况,我们可以考虑用clickhouse的ReplacingMergeTree引擎,这个引擎自动帮你筛选出来最新的一条数据,并删掉之前重复的数据。类似于mongo的updateOne,先增后删。
建表:
我们新建一个表replacing_test,用ReplacingMergeTree引擎,date作为分区键,id和name作为联合主键,point可以理解为版本号。
value就是你实际业务要的值,我们用数字类型举例。
create table replacing_test (date Date, id UInt8, name String, value UInt16, point DateTime)
ENGINE= ReplacingMergeTree(date, (id, name), 8192,point);
这个表,相同id-name的数据,最终只会留下一条,具体留下哪一条,是由不同的point决定的。
插入测试数据
看下面的代码,我们循环插入9*9=81条数据,联合主键只有id在变,name暂时只是字符串b
public static void main(String[] args)
ClickHouse ReplacingMergeTree引擎详解

最低0.47元/天 解锁文章
2239

被折叠的 条评论
为什么被折叠?



