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;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。