在Clickhouse衆多的表引擎中,MergeTree表引擎及其家族最爲強大,在生產環境中的絕大數場景,都會使用此係列的表引擎。
只有MergeTree系列的表引擎才支持主鍵索引,數據分區,數據副本,數據採樣這些特性,只有此係列的表引擎才支持ALTER操作。
MergeTree表引擎在寫入一批數據的時候,數據總會以數據片段的形式寫入磁盤,並且數據片段不可修改。爲了避免片段過多,clickhouse會通過後臺的線程,定期合併這些數據片段,屬於不同分區的數據片段會被合併成一個新的片段,這種數據片段往復合併的特點正式合併樹(MergeTree)名稱的由來。
1.Mergetree的創建:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]
解釋:
2.MergeTree的存儲結構:
MergeTree表引擎中的數據是擁有物理存儲的,數據會按照分區目錄的形式存儲到磁盤之上。
創建一個MergeTree分區表:
查看物理結構:
table_name
|---partition 1
| |--
解釋: