ClickHouse之ReplacingMergeTree引擎


簡介

該引擎和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 性能的額外參數:
  1. index_granularity 索引粒度。即索引中相鄰『標記』間的數據行數。默認值,8192 。該列表中所有可用的參數可以從這里查看 MergeTreeSettings.h 。
  2. use_minimalistic_part_header_in_zookeeper — 數據片段頭在 ZooKeeper 中的存儲方式。如果設置了 use_minimalistic_part_header_in_zookeeper=1,ZooKeeper 會存儲更少的數據。
  3. 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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM