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