clickhouse ReplacingMergeTree 引擎簡單使用

簡單的說 ReplacingMergeTree 可以實現數據的 ‘修改’
修改的原理是merge的時候保留大版本號的數據。

創建 ReplacingMergeTree 引擎表

create table test.replacingTable (create_time Date, id UInt16, primaryKey String, version UInt16) 
ENGINE=ReplacingMergeTree(version) 
PARTITION BY toYYYYMM(create_time)
ORDER BY (primaryKey)
SETTINGS index_granularity = 8192;

插入模擬數據

insert into test.replacingTable (create_time, id, primaryKey, version) values ('2020-05-26', 1, 'hagrid', 10);
insert into test.replacingTable (create_time, id, primaryKey, version) values ('2020-05-26', 1, 'hagrid', 20);
insert into test.replacingTable (create_time, id, primaryKey, version) values ('2020-05-27', 1, 'hagrid', 30);

查詢數據

select * from test.replacingTable

發現數據並沒有修改
在這裏插入圖片描述
手動觸發merge

optimize table test.replacingTable;

再次查詢發現數據已經更新
在這裏插入圖片描述
ps: 發現一個有趣的現象,我在測試中發現,當使用批量插入數據的時候,哪怕手動觸發了merge 數據也沒有更新。
當我再次插入一條數據後執行merge,數據更新成功。
這裏懷疑 ReplacingMergeTree 在執行merge操作的時候,對同一批來的數據有merge的策略,簡單的說就是merge的操作懶執行,需要新數據插入作爲事件驅動(懷疑未驗證)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章