本文介绍: 数据去重发生在后台合并数据时,后台合并数据是随机的,所以有时会有一些没处理的数据,可以通过OPTIMIZI来手动合并,官方建议不要指望它,因为OPTIMIZE会读写大量的数据(可能是会从头再合并一的原因吧)所以,ReplacingMergeTre适用于后台去重数据来节省空间的场景,但不保证没有一个重复的(官方说的,不是我说的)ver设置后才能设置is_deleted,用来标记这行数据是否删除,1代表删除(deleted),0代表存在(state)选最大的那个,ver设置时,选择设置值中最大的那一行。
区别于MergeTree表引擎,ReplacingMergeTree删除重复数据时是通过相同的分区值(ORDER BY的值)
数据去重发生在后台合并数据时,后台合并数据是随机的,所以有时会有一些没处理的数据,可以通过OPTIMIZI来手动合并,官方建议不要指望它,因为OPTIMIZE会读写大量的数据(可能是会从头再合并一的原因吧)
所以,ReplacingMergeTre适用于后台去重数据来节省空间的场景,但不保证没有一个重复的(官方说的,不是我说的)
建一个表
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], ... ) ENGINE = ReplacingMergeTree([ver [, is_deleted]]) [PARTITION BY expr] [ORDER BY expr] [PRIMARY KEY expr] [SAMPLE BY expr] [SETTINGS name=value, clean_deleted_rows=value, ...]
ver
可选,填入类型UInt*
, Date
, DateTime
or DateTime64
原则一:选最新的那个,ver没设置时,替换为最新插入的那一行
原则二:选最大的那个,ver设置时,选择设置值中最大的那一行
-- without ver - the last inserted 'wins' CREATE TABLE myFirstReplacingMT ( `key` Int64, `someCol` String, `eventTime` DateTime ) ENGINE = ReplacingMergeTree ORDER BY key; INSERT INTO myFirstReplacingMT Values (1, 'first', '2020-01-01 01:01:01'); INSERT INTO myFirstReplacingMT Values (1, 'second', '2020-01-01 00:00:00'); SELECT * FROM myFirstReplacingMT FINAL; ┌─key─┬─someCol─┬───────────eventTime─┐ │ 1 │ second │ 2020-01-01 00:00:00 │ └─────┴─────────┴─────────────────────┘ -- with ver - the row with the biggest ver 'wins' CREATE TABLE mySecondReplacingMT ( `key` Int64, `someCol` String, `eventTime` DateTime ) ENGINE = ReplacingMergeTree(eventTime) ORDER BY key; INSERT INTO mySecondReplacingMT Values (1, 'first', '2020-01-01 01:01:01'); INSERT INTO mySecondReplacingMT Values (1, 'second', '2020-01-01 00:00:00'); SELECT * FROM mySecondReplacingMT FINAL; ┌─key─┬─someCol─┬───────────eventTime─┐ │ 1 │ first │ 2020-01-01 01:01:01 │ └─────┴─────────┴─────────────────────┘
is_deleted
ver设置后才能设置is_deleted,用来标记这行数据是否删除,1代表删除(deleted),0代表存在(state)
想真正删除数据, 执行OPTIMIZE ... FINAL CLEANUP
或OPTIMIZE ... FINAL
或者表引擎配置 clean_deleted_rows
设置为 Always
.
-- with ver and is_deleted CREATE OR REPLACE TABLE myThirdReplacingMT ( `key` Int64, `someCol` String, `eventTime` DateTime, `is_deleted` UInt8 ) ENGINE = ReplacingMergeTree(eventTime, is_deleted) ORDER BY key; INSERT INTO myThirdReplacingMT Values (1, 'first', '2020-01-01 01:01:01', 0); INSERT INTO myThirdReplacingMT Values (1, 'first', '2020-01-01 01:01:01', 1); select * from myThirdReplacingMT final; 0 rows in set. Elapsed: 0.003 sec. -- 删除is_deleted标记为1的行 OPTIMIZE TABLE myThirdReplacingMT FINAL CLEANUP; INSERT INTO myThirdReplacingMT Values (1, 'first', '2020-01-01 00:00:00', 0); select * from myThirdReplacingMT final; ┌─key─┬─someCol─┬───────────eventTime─┬─is_deleted─┐ │ 1 │ first │ 2020-01-01 00:00:00 │ 0 │ └─────┴─────────┴─────────────────────┴────────────┘
原文地址:https://blog.csdn.net/qq_38608642/article/details/134652379
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_15011.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。