暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

clickhouse ReplacingMergeTree

Ty3306 2022-12-28
1408

ReplacingMergeTree
ReplacingMergeTree是MergeTree的一个变种,它存储特性完全继承MergeTree,只是多了一个去重的功能。

尽管MergeTree可以设置主键,但是primary key其实没有唯一约束的功能。如果你想处理掉重复的数据,可以借助这个ReplacingMergeTree。

去重时机:数据的去重只会在合并的过程中出现。合并会在未知的时间在后台进行,所以你无法预先作出计划。有一些数据可能仍未被处理。

去重范围:如果表经过了分区,去重只会在分区内部进行去重,不能执行跨分区的去重。

所以ReplacingMergeTree能力有限, ReplacingMergeTree 适用于在后台清除重复的数据以节省空间,但是它不保证没有重复的数据出现。

create table t_order_rmt(
id UInt32,
sku_id String,
total_amount Decimal(16,2) ,
create_time Datetime
) engine =ReplacingMergeTree(create_time)
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id, sku_id)

ReplacingMergeTree()填入的参数为版本字段,重复数据保留版本字段值最大的。

如果不填版本字段,默认保留最后一条。

insert into t_order_rmt
values(101,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(102,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 13:00:00')
(102,'sku_002',12000.00,'2020-06-01 13:00:00')
(102,'sku_002',600.00,'2020-06-02 12:00:00')

SELECT * FROM t_order_rmt

OPTIMIZE TABLE t_order_rmt FINAL

SELECT * FROM t_order_rmt

通过测试得到结论:

实际上是使用order by 字段作为唯一键。

去重不能跨分区。

只有合并分区才会进行去重。

认定重复的数据保留,版本字段值最大的。

如果版本字段相同则保留最后一条。





原文链接:https://blog.csdn.net/weixin_45596022/article/details/115358757

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论