You've already forked www.colben.cn
update
This commit is contained in:
@@ -6,12 +6,12 @@ tags: []
|
||||
categories: ["clickhouse"]
|
||||
---
|
||||
|
||||
# 简介
|
||||
## 简介
|
||||
- 支持主键索引、数据分区、数据副本、数据采样、ALTER 操作
|
||||
- 扩展表引擎丰富,生产环境中大多使用该表引擎
|
||||
- 数据以片段形式写入磁盘,后台定期合并片段到各分区相应片段
|
||||
|
||||
# 数据表
|
||||
## 数据表
|
||||
- 建表语句
|
||||
```sql
|
||||
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name(
|
||||
@@ -35,7 +35,7 @@ categories: ["clickhouse"]
|
||||
- merge_with_ttl_timeout: TTL 合并间隔时间,默认 86400(1天)
|
||||
- storage_policy: 数据在硬盘上的存储策略
|
||||
|
||||
# 数据文件
|
||||
## 数据文件
|
||||
- 目录和文件
|
||||
```
|
||||
table_name # 表名目录
|
||||
@@ -53,8 +53,8 @@ categories: ["clickhouse"]
|
||||
|___ skp_idx_{column_name}.mrk # 二级索引(跳数索引)列的标记文件
|
||||
```
|
||||
|
||||
# 数据分区
|
||||
## 分区 ID
|
||||
## 数据分区
|
||||
### 分区 ID
|
||||
- 单字段分区 ID 生成规则
|
||||
|
||||
类型 | 样例数据 | 分区表达式 | 分区 ID
|
||||
@@ -68,7 +68,7 @@ categories: ["clickhouse"]
|
||||
|
||||
- 多字段(元组)分区时, 先按单字段生成对应 ID,再用 "-" 拼接
|
||||
|
||||
## 分区目录
|
||||
### 分区目录
|
||||
- 分区目录命名: PartitionID_MinBlockNum_MaxBlockNum_Level,例如 202010_1_1_0
|
||||
- PartitionID: 分区 ID
|
||||
- MinBlockNum: 最小数据块编号,**表内全局累加**,从 1 开始
|
||||
@@ -83,7 +83,7 @@ categories: ["clickhouse"]
|
||||
- MaxBlockNum: 所有合并目录中的最大 MaxBlockNum
|
||||
- Level: 所有合并目录中的最大 Level 值并加 1
|
||||
|
||||
# 数据索引
|
||||
## 数据索引
|
||||
- 常驻内存
|
||||
- 一级索引是稀疏索引,间隔 index_granularity (默认 8192) 行数据生成一条索引记录
|
||||
- 二级索引又称跳数索引,有数据的聚合信息构建而成,在 CREATE 语句中定义如下:
|
||||
@@ -119,7 +119,7 @@ categories: ["clickhouse"]
|
||||
-- 注意传参时不需要指定 token 长度
|
||||
```
|
||||
|
||||
# 数据存储
|
||||
## 数据存储
|
||||
- 按列独立存储
|
||||
- 默认 LZ4 压缩
|
||||
- 按照 order by 排序
|
||||
@@ -128,20 +128,20 @@ categories: ["clickhouse"]
|
||||
- 64KB <= 单批次数据 <= 1MB,直接生成压缩数据块
|
||||
- 单批次数据 > 1MB,按照 1MB 大小截断并生成数据块,剩余数据继续按前面规则执行
|
||||
|
||||
# 数据标记
|
||||
## 数据标记
|
||||
- 使用 LRU 策略缓存
|
||||
- 每一行标记数据记录的是一个数据片段在 .bin 文件中的读取位置
|
||||
|
||||
# 数据写入
|
||||
## 数据写入
|
||||
- 生成分区目录,合并分区相同的目录
|
||||
- 按照 index_granularity 索引粒度,生成一级索引、二级索引、数据标记文件和数据压缩文件
|
||||
|
||||
# 数据查询
|
||||
## 数据查询
|
||||
- 借助分区、索引、数据标记来缩小扫描范围
|
||||
- 如果未指定查询条件,或条件未匹配到索引,MergeTree 仍可借助数据标记多线程读取压缩数据块
|
||||
|
||||
# 数据 TTL
|
||||
## TTL 机制
|
||||
## 数据 TTL
|
||||
### TTL 机制
|
||||
- TTL 信息保存在分区目录中的 ttl.txt 中
|
||||
- 支持的时间单位: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR
|
||||
- 触发 TTL 删除过期数据
|
||||
@@ -158,7 +158,7 @@ categories: ["clickhouse"]
|
||||
SYSTEM STOP TTL MERGES;
|
||||
```
|
||||
|
||||
## 列级别 TTL
|
||||
### 列级别 TTL
|
||||
- 到达时间时,列数据被还原为对应数据类型的默认值
|
||||
- 主键字段不能被声明 TTL
|
||||
- 声明列级别 TTL
|
||||
@@ -178,7 +178,7 @@ categories: ["clickhouse"]
|
||||
ALTER TABLE table_name MODIFY COLUMN code String TTL create_time + INTERVAL 1 DAY;
|
||||
```
|
||||
|
||||
## 表级别 TTL
|
||||
### 表级别 TTL
|
||||
- 到达时间时,删除过期的数据行
|
||||
- 声明表级别 TTL
|
||||
```sql
|
||||
@@ -198,24 +198,24 @@ categories: ["clickhouse"]
|
||||
ALTER TABLE table_name MODIFY TTL create_time + INTERVAL 3 DAY;
|
||||
```
|
||||
|
||||
# 存储策略
|
||||
## 存储策略
|
||||
- 最小移动单元是数据分区
|
||||
- 三大策略: 默认、JBOD、HOT/COLD
|
||||
|
||||
## 默认策略
|
||||
### 默认策略
|
||||
- 无需配置,所有分区自动保存至 config.xml 中的 path 目录下
|
||||
|
||||
## JOB 策略
|
||||
### JOB 策略
|
||||
- 适用于多磁盘无 RAID 场景
|
||||
- INSERT 或 MERGE 产生的新分区轮询写入各磁盘,类似 RAID0
|
||||
- 磁盘故障时,丢掉相应数据,需要副本机制保障数据可靠性
|
||||
|
||||
## HOT/COLD 策略
|
||||
### HOT/COLD 策略
|
||||
- 适用于已挂载不同类型磁盘的场景
|
||||
- 把磁盘划分到 HOT 和 COLD 两个区域,HOT 使用 SSD,注重性能,CODE 使用 HDD,注重经济
|
||||
- 单个区域内可应用 JBOD 策略
|
||||
|
||||
## 配置策略
|
||||
### 配置策略
|
||||
- 配置示例
|
||||
```xml
|
||||
<storage_configuration>
|
||||
@@ -290,7 +290,7 @@ categories: ["clickhouse"]
|
||||
ALTER TABLE table_name MOVE PART 'part_name' TO VOLUME 'volume_name';
|
||||
```
|
||||
|
||||
# ReplacingMergeTree
|
||||
## ReplacingMergeTree
|
||||
- 依据 ORDER BY 字段去重
|
||||
- 合并分区时,**以分区为单位**删除重复数据
|
||||
- 声明
|
||||
@@ -302,7 +302,7 @@ categories: ["clickhouse"]
|
||||
- 未指定 version_column 时,保留同一组重复数据中的最后一行
|
||||
- 指定 version_column 时,保留同一组重复数据中该字段取值最大的一行
|
||||
|
||||
# SummingMergeTree
|
||||
## SummingMergeTree
|
||||
- 场景: 用户只需要汇总结果,不关心明细
|
||||
- 依据 ORDER BY 字段聚合
|
||||
- 合并分区时,触发条件聚合,**以分区为单位**把同一分组下的多行数据汇总成一行
|
||||
@@ -316,7 +316,7 @@ categories: ["clickhouse"]
|
||||
- 非汇总字段保留同组内的第一行数据
|
||||
- 汇总嵌套字段时,字段名需以 Map 为后缀,默认嵌套字段中第一列作为聚合 Key,其他以 \*Key、\*Id、\*Type 未后缀名的列会和第一列组成复合 Key
|
||||
|
||||
# AggregatingMergeTree
|
||||
## AggregatingMergeTree
|
||||
- 预先计算聚合数据,二进制格式存入表中,空间换时间,可看成是 SummingMergeTree 的*升级版*
|
||||
- 依据 ORDER BY 字段聚合
|
||||
- 使用 AggregationFunction 字段类型定义聚合函数和字段
|
||||
@@ -357,7 +357,7 @@ categories: ["clickhouse"]
|
||||
SELECT id, sumMerge(value), uniqMerge(code) FROM agg_view GROUP BY id,city;
|
||||
```
|
||||
|
||||
# CollapsingMergeTree
|
||||
## CollapsingMergeTree
|
||||
- 以增代删
|
||||
- 声明
|
||||
```sql
|
||||
@@ -376,7 +376,7 @@ categories: ["clickhouse"]
|
||||
- 合并分区时,触发**以分区为单位**的数据折叠
|
||||
- 严格要求数据写入顺序,只有先写入 sign=1,再写入 sign=-1,才能正常折叠
|
||||
|
||||
# VersionedCollapsingMergeTree
|
||||
## VersionedCollapsingMergeTree
|
||||
- 与 CollapsingMergeTree 类似,但对数据写入顺序没有要求
|
||||
- 声明
|
||||
```sql
|
||||
|
Reference in New Issue
Block a user