编辑点评:clickhouse原理解析与应用实践pdf免费版
ClickHouse官方团队研发负责人及核心者作序推荐, ClickHouse核心贡献者执笔,一本书帮你驾驭ClickHouse,本书内容全面,从基础到原理、从理念到实践都有深度介绍,初中级读者通过这一本书就能充分掌握ClickHouse。
内容简介
这是一本可帮助读者深度理解并全面掌握ClickHouse运行原理并进行实践开发的工具书,涵盖了ClickHouse的时代背景、发展历程、核心概念、基础功能、运行原理、实践指导等多个维度的内容,
尤其是在ClickHouse最核心的部分——MergeTree表引擎与分布式方面,书中对其实现原理和应用技巧进行了详细解读。
本书采用浅显易懂的语言+大量演示案例+大量示意图例的形式呈现,以求让读者在最短的时间内,以最舒服的方式,获得最核心的知识。本书的理论观点来自作者在OLAP领域10余年的工作思考与总结;
功能与实操的素材来自作者在工作中对ClickHouse的深度应用与实践;原理解析部分的素材来自对大量专业文献的钻研与源码级的调试与解读。
本书在逻辑上分为三大部分:
第1~2章从宏观的角度出发,描述了时代背景、ClickHouse的发展历程及其核心特点。其中,对MOLAP、ROLAP和HORAP三种架构形态的优缺点进行了详细解读,对ClickHouse的发展历程和架构形态进行了深度剖析,
目的是帮助读者从根本上了解ClickHouse为什么具有这么高的性能。
第3~5章从实践应用的角度出发,详细介绍了ClickHouse基础功能的使用方法和技巧,其中包括对数据库、数据表、视图、数据字典等重点功能的剖析和演示。
第6~11章从原理的角度出发,解析了ClickHouse核心功能的运行机理。重点介绍了六大类数十种表引擎的主要特点与使用方法。其中对MergeTree的原理进行了深度解析,对它的基础数据结构、分区索引、一级索引、
二级索引、压缩数据块、数据标记等重要概念进行了解读;对副本与分片的运行原理也进行了详细剖析;对它的基础数据结构、分布式DDL、分布式协同的核心操作过程等进行了解读。
相关内容部分预览
作者简介
朱凯
ClickHouse贡献者之一,ClickHouse布道者,资深架构师,腾讯云最具价值专家TVP,开源爱好者,Apache DolphinScheduler Committer,《企业级大数据平台构建:架构与实现》作者,公众号“ClickHouse的秘密基地”运营者。
十多年IT从业经验,对大数据领域主流技术与解决方案有深入研究,擅长分布式系统的架构设计与整合。曾主导过多款大数据平台级产品的规划、设计与研发工作,一线实战经验丰富。
现就职于远光软件股份有限公司,任大数据事业部平台开发部总经理。
读者短评
由于工作需要一直在做大数据相关的事情,随着接触ClickHouse的项目越来越多,就开始希望能够ClickHouse有个更深入的理解。个人的习惯是通过图书的方式系统地学习,再补上针对具体情况查看博客和微信文章等。
在上线听过作者分享后,更加能体会到本书编写的逻辑性。通读了本书,收获很多并在期间就解决了ClickHouse的一些实际问题~ 并且对MergeTree的解读确实可以看到作者非常用心,赞~
Clickhouse基本操作
一、先来说一下,ClickHouse为啥快
ClickHouse有多少CPU,吃多少资源,所以飞快;
ClickHouse不支持事务,不存在隔离级别。这里要额外说一下,有人觉得,你一个数据库都不支持事务,不支持ACID还玩个毛。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。又有人要问了,数据都不一致,
统计个毛。举个例子,汽车的油表是100%准确么?为了获得一个100%准确的值,难道每次测量你都要停车检查么?统计数据的意义在于用大量的数据看规律,看趋势,而不是100%准确。
IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。
有人可能觉得上面的数据导入的时候,数据肯定缓存在内存里了,这个的确,但是ClickHouse基本上是顺序IO,用过就知道了,对IO基本没有太高要求,当然,磁盘越快,上层处理越快,但是99%的情况是,CPU先跑满了(数据库里太少见了,大多数都是IO不够用)。
二、创建库
CREATE/ATTACH DATABASE zabbix ENGINE = Ordinary;
ATTACH 也可以建库,但是metadata目录下不会生成.sql文件,一般用于metadata元数据sql文件被删除后,恢复库表结构使用
三、创建本地表
CREATE TABLE test02( id UInt16,col1 String,col2 String,create_date date ) ENGINE = MergeTree(create_date, (id), 8192);
ENGINE:是表的引擎类型,
MergeTree:最常用的,MergeTree要求有一个日期字段,还有主键。
Log引擎没有这个限制,也是比较常用。
ReplicatedMergeTree:MergeTree的分支,表复制引擎。
Distributed:分布式引擎。
create_date:是表的日期字段,一个表必须要有一个日期字段。
id:是表的主键,主键可以有多个字段,每个字段用逗号分隔。
8192:是索引粒度,用默认值8192即可。
四、创建分布式表
CREATE TABLE distributed_table AS table ENGINE = Distributed(cluster, db, table, rand());
cluster:配置文件中的群集名称。
db:库名。
table:本地表名。
rand():分片方式:随机。
intHash64():分片方式:指定字段做hash。
Distribute引擎会选择每个分发到的Shard中的”健康的”副本执行SQL
五、DDL
如果想按集群操作,需要借助zookeeper,在config.xml中添加配置
<distributed_ddl>
<path>/clickhouse/task_queue/ddl</path>
</distributed_ddl>
一个节点创建表,会同步到各个节点
CREATE TABLE db.table [ON CLUSTER cluster] (…)
添加、删除、修改列
ALTER TABLE [db].table [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN …
rename 支持*MergeTree和Distributed
rename table db.table1 to db.table2 [ON CLUSTER cluster]
truncate table db.table;不支持Distributed引擎
六、delete/update 不支持Distributed引擎
ALTER TABLE [db.]table DELETE WHERE filter_expr…
ALTER TABLE [db.]table UPDATE column1 = expr1 [, …] WHERE …
七、分区表
按时间分区:
toYYYYMM(EventDate):按月分区
toMonday(EventDate):按周分区
toDate(EventDate):按天分区
按指定列分区:
PARTITION BY cloumn_name
对分区的操作:
alter table test1 DROP PARTITION [partition] #删除分区
alter table test1 DETACH PARTITION [partition]#下线分区
alter table test1 ATTACH PARTITION [partition]#恢复分区
alter table .test1 FREEZE PARTITION [partition]#备份分区
八、数据同步
1) 采用remote函数
insert into db.table select * from remote('目标IP',db.table,'user','passwd')
2) csv文件导入clickhouse
cat test.csv | clickhouse-client -u user –password password –query="INSERT INTO db.table FORMAT CSV"
3) 同步mysql库中表
CREATE TABLE tmp ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('hostip:3306', 'db', 'table', 'user', 'passwd') ;
4) clickhouse-copier 工具
九、时间戳转换
select toUnixTimestamp('2018-11-25 00:00:02');
select toDateTime(1543075202);
十、其他事项
1) clickhouse的cluster环境中,每台server的地位是等价的,即不存在master-slave之说,是multi-master模式。
2) 各replicated表的宿主server上要在hosts里配置其他replicated表宿主server的ip和hostname的映射。
3) 上面描述的在不同的server上建立全新的replicated模式的表,如果在某台server上已经存在一张replicated表,并且表中已经有数据,这时在另外的server上执行完replicated建表语句后,已有数据会自动同步到其他server上面。
4) 如果zookeeper挂掉,replicated表会切换成read-only模式,不再进行数据同步,系统会周期性的尝试与zk重新建立连接。
5) 如果在向一张replicated表insert数据的时候zookeeper挂掉,这时候会抛一个异常,等到与zk重新建立连接以后,系统(其他replicated表所在server)会检查本地文件与预期文件(保存在zk上)的差别,
如果是轻微的差别,直接同步覆盖,如果发现有数据块损坏或者识别不了,则将这些数据文件移动到“detached”子目录,然后重新根据zk所记录的文件信息进行副本的同步。
6) drop掉某一台server上的replicated表,不会对其他server上面的replicated表造成影响。
Comments