MergeTree在寫入一批數據時,數據總會以數據片段的形式寫入磁盤,且數據片段不可修改。為了避免片段過多,ClickHouse會通過后臺線程,定期合并這些數據片段,屬于相同分區的數據片段會被合成一個新的片段。這種數據片段往復合并的特點,也正是合并樹名稱的由來。
?MergeTree作為家族系列最基礎的表引擎,主要有以下特點:
* 存儲的數據按照主鍵排序:允許創建稀疏索引,從而加快數據查詢速度
* 支持分區,可以通過PRIMARY KEY語句指定分區字段。
* 支持數據副本
* 支持數據采樣
?建表語法:
~~~
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, ...]
~~~
* ENGINE:ENGINE = MergeTree(),MergeTree引擎沒有參數
* ORDER BY:排序字段。比如ORDER BY (Col1, Col2),值得注意的是,如果沒有指定主鍵,默認情況下 sorting key(排序字段)即為主鍵。如果不需要排序,則可以使用ORDER BY tuple()語法,這樣的話,創建的表也就不包含主鍵。這種情況下,ClickHouse會按照插入的順序存儲數據。必選。
* PARTITION BY:分區字段,強烈建議指定。
* PRIMARY KEY:指定主鍵,如果排序字段與主鍵不一致,可以單獨指定主鍵字段。否則默認主鍵是排序字段。可選。
* SAMPLE BY:采樣字段,如果指定了該字段,那么主鍵中也必須包含該字段。比如SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))。可選。
* TTL:數據的存活時間。在MergeTree中,可以為某個列字段或整張表設置TTL。當時間到達時,如果是列字段級別的TTL,則會刪除這一列的數據;如果是表級別的TTL,則會刪除整張表的數據。大表強烈建議指定。
* SETTINGS:額外的參數配置。一般設置index\_granularity=8192 ,可選。
- 導讀
- 概述
- 第一章 安裝部署
- 1.1. docker安裝clickhouse
- 第二章 使用實踐與規范
- 2.1. ClickHouse應用場景
- 2.2. 表引擎選擇
- 2.2.1. MergeTree表引擎
- 2.2.2. ReplicatedMergeTree表引擎
- 2.2.3. ReplacingMergeTree表引擎
- 2.2.4. SummingMergeTree表引擎
- 2.2.5. Aggregatingmergetree表引擎
- 2.3. 開發規范
- 2.4. 集群架構
- 2.4.1. 常用架構
- 2.4.2. zookeeper的關鍵作用
- 2.4.3. chproxy
- 2.5. 客戶端工具選擇
- 2.6. 可用性說明
- 2.7. 集群配置參數調優
- 第三章 數據類型&語法以及常用函數
- 3.1. 基礎數據類型
- 3.2. SQL函數
- 3.3. DDL與DML基本語法
- 3.4. UPDATE 和 DELETE操作
- 3.4.1. 數據UPDATE和DELETE操作示例
- 3.4.2. 數據的實時更新操作(Real-time UPDATE)
- 第四章 clickhouse實戰篇
- 4.1. JDBC操作clickhouse
- 4.2. clickhouse集成mybatis