簡介
該引擎和MergeTree的不同之處在於它會刪除具有相同主鍵的重復項。
在數據合並的時候會對主鍵進行去重,合並會在后台執行,執行時間未知,因此你無法預先做出計划,當然你也可以調用OPTIMIZE語句來發起合並計划,但是這種方式是不推薦的,因為OPTIMIZE語句會引發大量的讀寫請求。
建表語句
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]) [PARTITION BY expr] [ORDER BY expr] [SAMPLE BY expr] [SETTINGS name=value, ...]
- ENGINE:引擎名和參數。
- ver:版本列,類型可以是UInt*,Date,或者DateTime,可選擇的參數。 合並的時候ReplacingMergeTree從相同的主鍵中選擇一行保留,如果ver列未指定,則選擇最后一條,如果ver列已指定,則選擇ver值最大的版本。
- PARTITION BY:分區鍵。要按月分區,可以使用表達式 toYYYYMM(date_column) ,這里的 date_column 是一個 Date 類型的列。這里該分區名格式會是 "YYYYMM" 這樣。
- ORDER BY: 表的排序鍵。可以是一組列或任意的表達式。 例如: ORDER BY (CounterID, EventDate) 。
- SAMPLE BY : 抽樣的表達式。如果要用抽樣表達式,主鍵中必須包含這個表達式。例如: SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID)) 。
- SETTINGS : 影響 MergeTree 性能的額外參數:
- index_granularity 索引粒度。即索引中相鄰『標記』間的數據行數。默認值,8192 。該列表中所有可用的參數可以從這里查看 MergeTreeSettings.h 。
- use_minimalistic_part_header_in_zookeeper — 數據片段頭在 ZooKeeper 中的存儲方式。如果設置了 use_minimalistic_part_header_in_zookeeper=1,ZooKeeper 會存儲更少的數據。
- min_merge_bytes_to_use_direct_io 使用直接 I/O 來操作磁盤的合並操作時要求的最小數據量。合並數據片段時,ClickHouse 會計算要被合並的所有數據的總存儲空間。如果大小超過了 min_merge_bytes_to_use_direct_io 設置的字節數,則 ClickHouse 將使用直接 I/O 接口(O_DIRECT 選項)對磁盤讀寫。如果設置 min_merge_bytes_to_use_direct_io = 0 ,則會禁用直接 I/O。默認值:10 * 1024 * 1024 * 1024 字節。
以上為建表參數描述,和MergeTree 相同,ver參數是本章重點。
Example
#測試建表語句 CREATE TABLE default.ReplacingMergeTreeTest ( id UInt8, age UInt8, name String ) ENGINE = ReplacingMergeTree(age) PARTITION BY id ORDER BY id
#插入數據 insert into default.ReplacingMergeTreeTest(id,age,name) values(1,25,'張三'); insert into default.ReplacingMergeTreeTest(id,age,name) values(1,22,'李四');
就不等它了,手動OPTIMIZE下。
OPTIMIZE TABLE default.ReplacingMergeTreeTest;
OPTIMIZE后
以上內容就是ReplacingMergeTree引擎相關介紹。
轉自:https://kknews.cc/code/mrly386.html