没有合适的资源?快使用搜索试试~ 我知道了~
3、ClickHouse表引擎-MergeTree引擎
需积分: 0 3 下载量 179 浏览量
2023-05-29
10:17:29
上传
评论
收藏 838KB PDF 举报
温馨提示
试读
19页
3、ClickHouse表引擎-MergeTree引擎 网址:https://blog.csdn.net/chenwewi520feng/article/details/130502351 介绍clickhouse 的表引擎,即mergetree引擎的使用
资源推荐
资源详情
资源评论
ClickHouse系列文章
1、ClickHouse介绍
2、clickhouse安装与简单验证(centos)
3、ClickHouse表引擎-MergeTree引擎
4、clickhouse的Log系列表引擎、外部集成表引擎和其他特殊的表引擎介绍及使用
5、ClickHouse查看数据库容量、表的指标、表分区、数据大小等
@TOC
本文主要介绍MergeTree引擎的几种情况,每种都有具体的使用示例。
本文使用前提参考该系列文章中的部署与验证。
本文主要分为二部分,即ClickHouse的表引擎介绍和MergeTree引擎几种引擎介绍。
Clickhouse是一个高性能且开源的数据库管理系统,主要用于在线分析处理(OLAP)业务。它采用列式存
储结构,可使用SQL语句实时生成数据分析报告,另外它还支持索引,分布式查询以及近似计算等特
性,凭借其优异的表现,ClickHouse在各大互联网公司均有广泛地应用。
官网:https://clickhouse.com/
中文官网:https://clickhouse.com/docs/zh
一、ClickHouse的表引擎介绍
ClickHouse的表引擎是ClickHouse服务的核心,主要提供的功能如下:
数据的存储方式和位置
支持哪些查询操作以及如何支持
数据的并发访问
数据索引的使用
是否可以支持多线程请求
是否可以支持数据复制
ClickHouse包含以下几种常用的引擎类型:
1. MergeTree引擎
该系列引擎是执行高负载任务的最通用和最强大的表引擎,它们的特点是可以快速插入数据以及进行后
续的数据处理。该系列引擎还同时支持数据复制(使用Replicated的引擎版本),分区(partition)以及一
些其它引擎不支持的额外功能。
2. Log引擎
该系列引擎是具有最小功能的轻量级引擎。当你需要快速写入许多小表(最多约有100万行)并在后续
任务中整体读取它们时使用该系列引擎是最有效的。
3. 集成引擎
该系列引擎是与其它数据存储以及处理系统集成的引擎,如Kafka,MySQL以及HDFS等,使用该系列引
擎可以直接与其它系统进行交互,但也会有一定的限制。
4. 特殊引擎
该系列引擎主要用于一些特定的功能,如Distributed用于分布式查询,MaterializedView用来聚合数
据,以及Dictionary用来查询字典数据等。
二、MergeTree系列引擎
在所有的表引擎中,最为核心的当属MergeTree系列表引擎,这些表引擎拥有最为强大的性能和最广泛
的使用场合。对于非MergeTree系列的其他引擎而言,主要用于特殊用途,场景相对有限。而
MergeTree系列表引擎是官方主推的存储引擎,支持几乎所有ClickHouse核心功能。
1、MergeTree表引擎
MergeTree在写入一批数据时,数据总会以数据片段的形式写入磁盘,且数据片段不可修改。为了避免
片段过多,ClickHouse会通过后台线程,定期合并这些数据片段,属于相同分区的数据片段会被合成一
个新的片段。这种数据片段往复合并的特点,也正是合并树名称的由来。
MergeTree作为家族系列最基础的表引擎,主要有以下特点:
存储的数据按照主键排序:允许创建稀疏索引,从而加快数据查询速度
支持分区,可以通过PRIMARY KEY语句指定分区字段。
支持数据副本
支持数据采样
1)、建表语法
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]
-- ENGINE:ENGINE = MergeTree(),MergeTree引擎没有参数
-- ORDER BY:排序字段。比如ORDER BY (Col1, Col2),值得注意的是,如果没有指定主键,默认情况
下 sorting key(排序字段)即为主键。如果不需要排序,则可以使用ORDER BY tuple()语法,这样的
话,创建的表也就不包含主键。这种情况下,ClickHouse会按照插入的顺序存储数据。必选。
-- PARTITION BY:分区字段,可选。
-- PRIMARY KEY:指定主键,如果排序字段与主键不一致,可以单独指定主键字段。否则默认主键是排序字
段。可选。
-- SAMPLE BY:采样字段,如果指定了该字段,那么主键中也必须包含该字段。比如SAMPLE BY
intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))。可选。
-- TTL:数据的存活时间。在MergeTree中,可以为某个列字段或整张表设置TTL。当时间到达时,如果是
列字段级别的TTL,则会删除这一列的数据;如果是表级别的TTL,则会删除整张表的数据。可选。
-- SETTINGS:额外的参数配置。可选。
2)、使用示例
建表
插入数据
查询数据
查看一下数据存储格式,可以看出,存在三个分区文件夹,每一个分区文件夹内存储了对应分区的
数据
-- 数据库使用tutorial
-- 建表
CREATE TABLE emp_mergetree
(
`emp_id` UInt16 COMMENT '员工id',
`name` String COMMENT '员工姓名',
`work_place` String COMMENT '工作地点',
`age` UInt8 COMMENT '员工年龄',
`depart` String COMMENT '部门',
`salary` Decimal32(2) COMMENT '工资'
)
ENGINE = MergeTree
PARTITION BY work_place
ORDER BY emp_id;
-- 插入数据
INSERT INTO emp_mergetree VALUES (1,'tom','上海',25,'技术部',20000),(2,'jack','上
海',26,'人事部',10000);
INSERT INTO emp_mergetree VALUES (3,'bob','北京',33,'财务部',50000),(4,'tony','杭
州',28,'销售事部',50000);
-- 查询数据
-- 按work_place进行分区
select * from emp_mergetree;
剩余18页未读,继续阅读
资源评论
一瓢一瓢的饮alanchanchn
- 粉丝: 2875
- 资源: 69
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功