目录
1 #Log家族
1.1 对比Log家族的引擎
1.2 #Log 数据分块
1.3 #TinyLog ,数据不分块
1.3.1 TinyLog不支持并发操作,会破坏表数据
如果对TinyLog引擎的表进行并发操作,会破坏表数据,导致无法对表进行操作,此时只能手动去删除表目录、表的元数据
由于表无法被操作(无法使用drop
删除表,因此只能删掉表的数据文件和元数据文件)
1.4 #StripeLog ,数据分块
2 #MergeTree家族 #合并树
2.1 MergeTree家族引擎的特点
2.2 #MergeTree
2.2.1 #主键 #primary key #order by #排序键
2.2.1.1 主键必须是排序字段的前缀
建表时,必须指定主键,且主键必须是排序字段
order by
的前缀,默认order by
一定包含主键
2.2.1.2 主键没有唯一性,可以有重复值
2.2.2 数据目录 #目录
在MergeTree家族中,一个数据块对应一个分区目录(表不分区,则默认分区为all)
2.2.2.1 例子:不分区的表 #index_granularity #索引粒度
2.2.3 创建不分区的表
一个数据块对应一个分区目录,需要自己手动合并相同分区,即合并数据块
2.2.3.1 合并数据块 #optimize
2.2.4 创建分区表 #partition by
2.2.4.1 合并相同分区
2.3 #ReplacingMergeTree #去重合并树 ,去掉重复记录 #去重
2.3.1 去重策略 #order by #排序键
同一个分区下,排序键相同,则数据重复
2.3.2 不指定版本号的去重,只保留后插入的记录
2.3.3 指定版本号的去重,只保留版本号最大的记录 #版本 #version
2.3.3.1 例子:版本号是无符号整型
2.3.3.2 例子:版本号是时间
2.4 #CollapsingMergeTree #折叠合并树 #sign
合并分区时,对同一个分区下,排序字段相同的记录进行sign折叠删除,和记录的插入顺序有关
2.4.1 #折叠删除 ,只保留后插入的未被折叠的记录 #order by #排序键
同一个分区下,在排序字段值相同的情况下,后插入的sign=-1的记录会折叠先插入的sign=1的记录,被折叠的记录会被删除(折叠删除)
2.4.1.1 记录无法被折叠删除的情况
多线程乱序插入记录时,可能会出现记录无法被折叠删除的问题,因为先插入的sign=-1无法被后插入的sign=1折叠删除
2.4.1.2 例子:没有分区的折叠删除
2.4.1.3 例子:有分区的折叠删除
2.4.2 去重排序值相同且sign相同的记录 #排序键 #去重
对于分区内排序值相同且sign相同的记录,CollapsingMergeTree会进行去重,类似ReplacingMergeTree不指定版本号的情况
如果有多个sign=-1,则保留第一个插入的sign=-1
如果有多个sign=1,则保留最后一个插入的sign=1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-35vHZo1x-1658657253962)(https://cloudimg001.oss-cn-shenzhen.aliyuncs.com/image/202207080731284.png)]
2.4.2.1 例子:只保留最后一个sign=1
2.4.3 #VersionedCollapsingMergeTree #版本折叠合并树 #版本 #version
合并分区时,对
同一个分区
下,只要排序字段和版本号都相同
的记录、且sign标记相反
的记录就能折叠删除,和插入顺序无关
2.5 SummingMergeTree #求和合并树 ,对数值列求和 #聚合函数
同一个分区下,排序键相同,即为重复的行
在进行分区合并时,对相同分区内重复的行,进行聚合函数
sum
的处理排序字段值相同的记录的数值类型字段进行数值求和
2.5.1 对所有数值类型字段求和
2.5.2 对指定数值类型字段求和
2.6 AggregatingMergeTree #聚合合并树 #聚合函数 #聚合表 #State #Merge
同一个分区下,排序键相同,即为重复的行
在进行分区合并时,对相同分区内重复的行,进行聚合函数的处理
AggregatingMergeTree是SummingMergeTree的升级版,不仅支持求和函数sum,还支持其他聚合函数
AggregatingMergeTree只能用于处理MergeTree家族的表,因为涉及排序字段order by
2.6.1 创建AggregatingMergeTree表实现聚合函数,不推荐 #AggregateFunction
2.6.1.1 在AggregatingMergeTree表中查询聚合函数结果
2.6.2 创建AggregatingMergeTree物化视图实现聚合函数,推荐 #物化视图 #materialized view
2.6.2.1 在AggregatingMergeTree物化视图中查询聚合函数结果
3 外部表引擎
https://clickhouse.com/docs/zh/engines/table-engines/integrations/
3.1 #hdfs 引擎,远程连接hdfs
3.1.1 hdfs函数
3.2 #mysql 引擎,远程连接mysql
3.2.1 mysql类型和clickhouse类型的对应关系
3.2.2 mysql表引擎,远程连接mysql表
3.2.2.1 远程操作mysql的表
3.2.3 mysql函数,远程连接mysql数据
3.2.4 mysql数据库引擎,远程连接mysql数据库
mysql表引擎可以远程连接mysql表,mysql数据库引擎可以远程连接mysql的数据库,操作范围更广
3.3 #file 引擎,在默认路径下读取默认文件数据 #导入
3.3.1 file函数,读取默认路径下指定的文件数据 #导入
3.3.1.1 修改配置文件中file函数默认的目录路径
4 内存引擎
4.1 #Memory
4.2 #set 引擎,去重记录 #集合
在内存中读取数据,但插入记录insert会被持久化到磁盘,重启服务器,数据不会丢失