【clickhouse】表引擎总结

目录


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

clickhouse支持的聚合函数

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会被持久化到磁盘,重启服务器,数据不会丢失

4.2.1 查询set表 #in #子查询

4.3 #Buffer 引擎,处理MergeTree表并发写入问题 #缓冲表 #缓冲区 #MergeTree

4.3.1 写入的不一定是同一个缓冲区

4.3.2 例子

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值