1. ClickHource 建表引擎的功能
1. 数据的存储方式
2. 是否可以使用索引
3. 数据的存储位置
4. 并发数据的访问
5. 会否可以使用分区
6. 是否支持数据的副本
2.ClickHouse 的表引擎分为四大类
1. MergeTree 系列引擎
2. Log 系列引擎
3. 与其他存储/处理系统集成的引擎
4.特定功能的引擎
每个引擎都包含了多个具体的引擎,每个引擎均都有使用的场景。
3. 详细来说说MergeTree 系列引擎
3.1MergeTree 引擎的使用场景
使用与高负载任务的最通用的和功能强大的表引擎,可以快速插入数据并进行后续的后台数据处理,支持复制(使用Replicated*的引擎版本), 分区和其他的引擎不支持的特性。
3.2 MergeTree 的引擎系列有几大类
1.MergeTree
2.ReplacingMergeTree
3.SummingMergeTree
4.AggregatingMergeTree
5.CollapsingMergeTree
6.VersionedCollapsingMergeTree
7.GraphiteMergeTree
4.MergeTree 系列引擎的特点和存储结构
4.1 MergeTree 是ClickHouse 中最强大的的表引擎。
主要的特点:
1.数据按照主键排序,稀疏索快速检索数据
2.数据的分区,增加一个查询效率(分区也就是一个分目录的存储和hive 的分区概念一样)
3.数据副本,ReplicatedMergeTree系列的引擎支持数据副本, 提升查询性能和容错
4.数据采样,设置采样方法,快速分析数据。
4.2 建表的实例
关键字:
ENEIGE---------------------- 引擎名称和参数
PARTITION BY----------------分区的字段
ORDER BY-------------------- 表的排序键
PRIMARY KEY------------------表的主键
SAMPLE BY----------------- --采样表达式
TTL -------------------------定义行数据的存储时间,磁盘和卷之间的数据片段的自动移动的逻辑。
STTINGS ---------------------控制MergeTree的行为的额外参数
4.3 MergeTree 的重要参数:
重要的参数:
1.index_granularity :索引的粒度,以行数为单位,表示索引的标记(mark) 之间的最大行数,默认值:8192.
2.index_granularity_bytes: 索引的粒度,以自己为单位,表示索引粒度的最大字节大小,默认值是10Mb ,如果设置该参数为0, 将仅按照行数限制索引粒度大小。
3.use_minimalistic_part_header_in_zookeeper: 数据片段(part) 头在Zookeeper 中的存储方法,设置为1,紧凑存车处数据片段头信息,极大减少Zookeeper 的存储数据量。
4.storage_policy : 存储策略,存储策略定义了使用多块社保进行数据存储的逻辑。
其他的参数设置可以用查询默认表:
select * from system.merge_tree_settings
4.4 建表实例
// 创建不分区表
CREATE TABLE merge_demo
( srcip STRING, destip STRING ,date_time DATETIME)
ENGINE=MergeTree()
ORDER BY srcip SETTINGS index_granularity = 8192;
// 插入数据
insert into merge_demo values('113.248.234.232','123.212.22.01','2018-07-12 14:25:31'),
('113.248.234.231','123.212.22.01','2019-08-15 14:25:31'),
('113.248.234.230','123.212.22.01','2020-09-20 14:25:31'),
('113.248.234.232','123.212.22.01','2018-10-12 14:25:31'),
('113.248.234.231','123.212.22.01','2018-11-28 14:25:31')
// 常见分区表
CREATE TABLE merge_partition_demo
( srcip STRING, destip STRING ,date_time DATETIME)
ENGINE=MergeTree()
PARTITION BY toYYYYMM(date_time)
ORDER BY (srcip);
// 插入数据
insert into merge_partition_demo values('113.248.234.232','123.212.22.01','2018-07-12 14:25:31'),
('113.248.234.231','123.212.22.01','2019-08-15 14:25:31'),
('113.248.234.230','123.212.22.01','2020-09-20 14:25:31'),
('113.248.234.232','123.212.22.01','2018-10-12 14:25:31'),
('113.248.234.231','123.212.22.01','2018-11-28 14:25:31');
可以看出分区表和普通表的存储不同如下图
22222222222222222.jpg
文件解释:
1.checksums.txt:校验文件的正确性和完整性。
2.columns.txt:存储列的信息,包括数据类型。
3.count.txt : 存储分区目录下数据的总行数。
4.primary.idx : 存储索引数据的文件。稀疏索引,能够加速查询。
5.bin文件:存储数据的文件, 以压缩格式存储,默认LZ4。
6.mrk文件:存储列的数据标记的文件。
7.partiton.dat:存储存储分区表达式生成的值。使用二进制格式存储。该文件只在分区表中存储。
8.minmax_*文件: 存储能当前目录下, 分区字段对应的原始字段的最小和最大值
网友评论