ClickHouse库表引擎
2025-01-24 15:56:03 0 举报
AI智能生成
ClickHouse库表引擎
作者其他创作
大纲/内容
数据库引擎
Atomic
Lazy
Replicated
PostgreSQL
MySQL
表引擎
MergeTree系列
ReplacingMergeTree
1、用于主键去重的场景,对于具有相同排序键值(ORDER BY)的重复条目会删除;
2、删除重复数据仅在合并期间发生;
3、合并在后台进行,时间未知,因此无法计划;
4、可以执行 OPTIMIZE 语句,但执行时会读取和写入大量数据,对表查询可能造成影响;
5、适合在后台清除重复数据以节省空间,但不能保证没有重复;
6、以数据分区为单位删除数据,当分区合并时,同一分区内的重复数据会被清除,不同分区之间的重复数据不会被清除;
7、在进行数据清除时,因为分区内的数据已经基于 ORDER BY 进行了排序,所以能够方便的找到那些相邻的重复数据;
8、数据去重策略:如果没有设置版本号,则保留重复数据中的最后一行;如果设置了版本号,则保留重复数据中版本号最大的一行;
2、删除重复数据仅在合并期间发生;
3、合并在后台进行,时间未知,因此无法计划;
4、可以执行 OPTIMIZE 语句,但执行时会读取和写入大量数据,对表查询可能造成影响;
5、适合在后台清除重复数据以节省空间,但不能保证没有重复;
6、以数据分区为单位删除数据,当分区合并时,同一分区内的重复数据会被清除,不同分区之间的重复数据不会被清除;
7、在进行数据清除时,因为分区内的数据已经基于 ORDER BY 进行了排序,所以能够方便的找到那些相邻的重复数据;
8、数据去重策略:如果没有设置版本号,则保留重复数据中的最后一行;如果设置了版本号,则保留重复数据中版本号最大的一行;
SummingMergeTree
1、用于根据主键即排序键进行聚合(只能 SUM)的场景;
2、当数据插入表中时,会按原样保存,CK 会定期合并插入的数据分区;
3、仅对同一分区内具有相同排序键的值进行合并聚合,不同分区不会被聚合;
4、在进行数据聚合时,因为分区内的数据已经基于 ORDER BY 进行了排序,所以能够方便的找到那些相邻的数据进行聚合;
5、当未指定聚合列时,会聚合所有非主键的数值字段;
6、CK 可能无法完全汇总所有行,因此在查询时需要使用 SUM 函数和 GROUP BY 子句;
2、当数据插入表中时,会按原样保存,CK 会定期合并插入的数据分区;
3、仅对同一分区内具有相同排序键的值进行合并聚合,不同分区不会被聚合;
4、在进行数据聚合时,因为分区内的数据已经基于 ORDER BY 进行了排序,所以能够方便的找到那些相邻的数据进行聚合;
5、当未指定聚合列时,会聚合所有非主键的数值字段;
6、CK 可能无法完全汇总所有行,因此在查询时需要使用 SUM 函数和 GROUP BY 子句;
AggregatingMergeTree
1、用于根据主键即排序键进行聚合的场景,可以进行增量函数聚合,包括聚合物化视图;
2、会将所有具有相同排序键的行替换为一行,该行存储聚合函数的状态组合;
3、使用 AggregateFunction 字段类型作为需要聚合的字段的类型;
4、只有在合并时才会触发聚合计算的逻辑;
5、仅对同一分区内具有相同排序键的值进行合并聚合,不同分区不会被聚合;
6、在进行数据聚合时,因为分区内的数据已经基于 ORDER BY 进行了排序,所以能够方便的找到那些相邻的数据进行聚合;
7、在聚合时,对于非排序键及非 AggregateFunction 类型的字段,则会使用第一行数据的取值;
8、AggregateFunction 类型的字段会使用二进制存储,在写入数据时,需要使用 *State 函数;在查询数据时,需要使用对应的 *Merge 函数;
9、通常作为物化视图的表引擎,与普通 MergeTree 搭配使用;
2、会将所有具有相同排序键的行替换为一行,该行存储聚合函数的状态组合;
3、使用 AggregateFunction 字段类型作为需要聚合的字段的类型;
4、只有在合并时才会触发聚合计算的逻辑;
5、仅对同一分区内具有相同排序键的值进行合并聚合,不同分区不会被聚合;
6、在进行数据聚合时,因为分区内的数据已经基于 ORDER BY 进行了排序,所以能够方便的找到那些相邻的数据进行聚合;
7、在聚合时,对于非排序键及非 AggregateFunction 类型的字段,则会使用第一行数据的取值;
8、AggregateFunction 类型的字段会使用二进制存储,在写入数据时,需要使用 *State 函数;在查询数据时,需要使用对应的 *Merge 函数;
9、通常作为物化视图的表引擎,与普通 MergeTree 搭配使用;
CollapsingMergeTree
1、用于在排序键所有字段都相同,根据状态行删除数据的场景;
2、在创建表时需要指定状态行 Sign;
3、SELECT 的结果在很大程度上取决于对象变更历史的一致性,准备要插入的数据时要有一定准确,数据不一致可能会导致不可预测的结果;
4、只有在分区合并时才会触发数据删除的逻辑;
5、查询返回策略:
1)、如果状态行和取消行行数匹配且最后一行是状态行,则保留第一个取消行和最后一个状态行;
2)、如果状态行比取消行多一个或者多个,保留最后一个状态行;
3)、如果取消行比状态行多,则保留第一个取消行;
4)、除上面三种情况外的所有情况下,都没有任务行;
6、Sign 列是必须的,因为合并算法不能保证具有相同排序键的所有行都位于同一个结果数据片段中,甚至位于同一个服务器上,CK 使用多线程处理查询,并且无法预测结果中行的顺序;
7、如果需要从该类型表中获取完全折叠后的数据,需要进行聚合,可以使用 GROUP BY 子句和用于处理符号的聚合函数实现;
8、可以手动折叠合并,使用 FINAL 修饰 FROM 条件,但效率低下;
2、在创建表时需要指定状态行 Sign;
3、SELECT 的结果在很大程度上取决于对象变更历史的一致性,准备要插入的数据时要有一定准确,数据不一致可能会导致不可预测的结果;
4、只有在分区合并时才会触发数据删除的逻辑;
5、查询返回策略:
1)、如果状态行和取消行行数匹配且最后一行是状态行,则保留第一个取消行和最后一个状态行;
2)、如果状态行比取消行多一个或者多个,保留最后一个状态行;
3)、如果取消行比状态行多,则保留第一个取消行;
4)、除上面三种情况外的所有情况下,都没有任务行;
6、Sign 列是必须的,因为合并算法不能保证具有相同排序键的所有行都位于同一个结果数据片段中,甚至位于同一个服务器上,CK 使用多线程处理查询,并且无法预测结果中行的顺序;
7、如果需要从该类型表中获取完全折叠后的数据,需要进行聚合,可以使用 GROUP BY 子句和用于处理符号的聚合函数实现;
8、可以手动折叠合并,使用 FINAL 修饰 FROM 条件,但效率低下;
VersionedCollapsingMergeTree
1、用于快速写入不断变化的对象状态,并在后台删除旧对象状态的场景;
2、允许使用多个线程以任何顺序插入数据;
3、在创建表时,需要指定状态行及版本行;
4、只有在分区合并时才会触发数据删除的逻辑;
5、如果需要从该类型表中获取完全折叠后的数据,需要进行聚合,可以使用 GROUP BY 子句和用于处理符号的聚合函数实现;
6、可以手动折叠合并,使用 FINAL 修饰 FROM 条件,但效率低下;
2、允许使用多个线程以任何顺序插入数据;
3、在创建表时,需要指定状态行及版本行;
4、只有在分区合并时才会触发数据删除的逻辑;
5、如果需要从该类型表中获取完全折叠后的数据,需要进行聚合,可以使用 GROUP BY 子句和用于处理符号的聚合函数实现;
6、可以手动折叠合并,使用 FINAL 修饰 FROM 条件,但效率低下;
GraphiteMergeTree
Log 系列
Log
该引擎系列是为了满足需要快速写入许多小表(最多100万行)并稍后整体读取的场景开发。
StripeLog
TinyLog
集成引擎系列
HDFS
该引擎允许通过 CK 管理 HDFS 上的数据,与 Hadoop 生态系统集成。
Hive
允许对 Hive 表进行查询。
Hudi
JDBC
允许 CK 通过 JDBC 连接到外部数据库。
Kafka
MySQL
PostgreSQL
S3
...
特殊引擎系列
Distributed
分布式引擎表不实际存储数据,是基于本地表存储,允许在多台机器上进行分布式查询处理,查询自动并行化。
Dictionary
字典表
Merge
本身不存储数据,可以从任意数量的其他表读取数据,查询并行化,不支持写入表。
File
支持直接读取本地文件的数据,还可以将数据导出为本地文件。
Join
主要用途是在内存中缓存较小的数据集,以便快速的与较大的数据表进行 JOIN 操作,作为辅助表,加速查询性能。
Memory
直接将数据存储在内存中,不会压缩也不会被转换。
...
0 条评论
下一页
为你推荐
查看更多