clickhouse FINAL 关键字使用

FINAL关键字 (针对 ReplacingMergeTree 引擎)

ClickHouse会在返回结果之前完全合并数据,从而执行给定表引擎合并
期间发生的所有数据转换。
注意:

1、select语句+final的话,会对表的order字段进行排序去重。注意主键要加上分区字段(虽然跨分区不会去重,但select会合并结果)(试验过)。

2、在大多数情况下,避免使用 FINAL. 常见的方法是使用假设后台进程的不同查询 MergeTree 引擎还没有发生,并通过应用聚合(例如,丢弃重复项)来处理它。

3、join 去重表 final 这样不会去重,join(select * from 去重表 final)这样才能去重。

分布式表可以加final,可以实现去重。 要确定好分布式表的sharding_key(一定是主键的第一个),确保相同的数据去到同一个节点。

解决:
换用ReplacingMergeTree引擎建表
ReplacingMergeTree建表语法参考:(根据 id + code 分组去重)

create table replace_test(
        id String,
        code String,
        create_time DateTime
)ENGINE = ReplacingMergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY (id,code)
PRIMARY key id;
 

参考:
https://blog.csdn.net/qbm1234...

https://blog.csdn.net/qq_3830...


goper
413 声望25 粉丝

go 后端开发