Deduplication Strategies 笔记
去重操作,CH不是在插入阶段去重,而是插入后,速度会很快,影响:
- 任何时间,数据中可能会有重复数据
- 分区合并时,才会去重
- 查询语句需要适配重复数据
几种合并:
- ReplacingMergeTree: 相同排序键的会被合并
- CollapsingMergeTree: 有一个字段标识取消,可以声明取消前面的数据,然后再插入新数据,多线程写的情况不适用。
- VersionedCollapsingMergeTree: 带有版本号的去重,可以
Q: 为什么数据没有被去重?
A: 如果SQL中使用了非幂等的函数,那么每一行都是不一样的,MergeTree引擎不知到如何去重,可以
去重相关的设置项
insert_deduplication_token
SQL中可以提供用户自己的去重标记,可以防止重复的数据被自动去重
replicated_deduplication_window
insert会创建一个或者多个block,当往副本表中插入数据时,ch会将创建快的hash写入zk,会仅存储最近的replicated_deduplication_window
个块,这个值太大会减慢入库速度。这个hash是从列名、类型、值组合计算出来的。
non_replicated_deduplication_window
对于non-replicated MergeTree的最近多少个block。
replicated_deduplication_window_seconds
去重用的最近n个hash存储多长时间,默认1w