首页>参考读物>计算机科学与技术>数据库

ClickHouse原理解析与应用实践
作者 : 朱凯 著
丛书名 : 数据库技术丛书
出版日期 : 2020-05-25
ISBN : 978-7-111-65490-2
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 292
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书是一本系统介绍Clickhouse的指导型工具书,全书总共分为11章:
第1章 介绍ClickHouse的由来、发展历程、核心特点与核心特点。第2~6章 介绍了ClickHouse基础使用部分,包括整体架构、如何安装、数据定义、数据引擎、数据查询和函数的特性和使用方法。第7~9章介绍了ClickHouse高级特性部分,包括数据库管理操作,数据分片、数据副本和高可用的特性和使用方法。第10~11章介绍了如果自己手动实现ClickHouse中间件的思路和示例,同时也介绍了几款可视化工具与ClickHouse集成的方法。

图书特色

ClickHouse开发团队负责人及核心贡献者亲自作序推荐,ClickHouse华人社区与大数据领域多位专家联袂推荐
ClickHouse贡献者和布道者亲自执笔,从核心理念、基础功能、运行原理以及实践应用等多个维度,对ClickHouse进行全方位解析
ClickHouse
原理解析与应用实践
ClickHouse Principle and Practice
朱凯   著

图书前言

为什么要写这本书
生生不息,“折腾”不止。为什么新的技术层出不穷,一直会更替变换?因为人们总是乐于追求更加美好的事物,因此业务总会产生新的诉求。
在软件领域,技术与业务犹如一对不可拆分的双轨车道,承载着产品这辆火车稳步向前。一方面,业务的诉求必须得到满足,所以它倒逼技术提升;另一方面,技术的提升又为业务模式带来了新的可能。
在我所处的BI分析领域,分析软件的产品形态和底层技术就历经了几番更替。特别是在近些年,随着数字化转型浪潮的持续加温,以及“自服务”“人人都是分析师”等理念的进一步推广,分析型软件对底层OLAP技术的实时性提出了越来越苛刻的要求。传统数据库技术早已不堪重负,以Hadoop生态为代表的大数据技术也遇到了各种各样的难题。
在一次机缘巧合下我接触到了ClickHouse,我对它最初的印象极为深刻,ROLAP、在线实时查询、完整的DBMS、列式存储、不需要任何数据预处理、支持批量更新、具有非常完善的SQL支持和函数、支持高可用、不依赖Hadoop复杂生态、开箱即用……借助它仿佛就能解决所有的难题。在经过一番论证之后,我们用ClickHouse完全替换了公司现有产品的底层实现,使公司产品相关性能得到大幅提升。
ClickHouse就是这样一款拥有卓越性能的OLAP数据库,是目前业界公认的OLAP数据库黑马,有很大的发展潜力,并且已经在许多企业的内部得到应用。
然而在使用的过程中,我发现ClickHouse的学习资料匮乏,除了官方手册之外,基本没有其他成体系的资料。即便是官方手册,也缺乏一些原理性的解释。虽然它早在2016年就进行了开源,然而截至目前,市面上也没有一本相关的书籍。
作为一名ClickHouse的贡献者,我觉得有义务做些什么。所以我对自己在实践和学习ClickHouse的过程中得到的经验进行了梳理和总结,并编写成书,分享给各位读者。与此同时,也希望将这款优秀的开源软件介绍给更多的朋友。最后,希望本书能够在各位读者应用ClickHouse时提供一定的帮助。
读者对象
商业智能分析领域的工程师:作为一款性能卓越的OLAP数据库,ClickHouse非常适合用作分析软件的底层数据库。通过阅读本书,你将快速掌握ClickHouse的使用方法及其核心原理,这将有助于你顺利把ClickHouse运用在程序中,从而为程序带来数倍至数百倍的性能提升。
数据分析领域的工程师:作为分析领域的工程师,你可能会面对日志分析、用户行为分析、异常检测、流量分析等众多场景,ClickHouse可以支撑从数十行至数万亿行数据规模的一站式分析查询工作。通过阅读本书,你将快速掌握ClickHouse的使用方法,这将有助于你顺利把ClickHouse运用在分析场景中,从而带来工作效率的提升以及软硬件成本的降低。
软件架构师:作为一名软件架构师,需要持续保持敏锐的嗅觉以跟进业界的新动态。所以我向你隆重推荐ClickHouse,它是OLAP数据库领域的一项新兴技术,简单易用且拥有强大的性能。通过阅读本书,你将迅速了解ClickHouse的核心特点和能力边界。本书对ClickHouse核心原理部分的讲解将有助于你进行技术选型。如果你恰好在进行OLAP领域相关的架构设计,那么ClickHouse很可能就是你一直苦苦寻觅的那剂良方。
计算机专业的高校学生:大数据早已成为国家战略,现如今许多高校都开设了Hadoop相关的大数据课程。但Hadoop毕竟是十多年前的产物。在掌握Hadoop基础知识的同时,也应该了解业界正在运用的新兴技术。即便是没有选修大数据课程的学生,我也推荐阅读本书。因为目前在高校的教学体系中,数据库软件相关的课程大部分以介绍OLTP数据库为主(例如SQL Server),然而在实际工作中,还会用到一类专门用于分析的OLAP数据库,ClickHouse就是其中的佼佼者。本书深入浅出,体系化地介绍了ClickHouse的方方面面,非常适合作为延伸读物供相关专业的学生阅读。这将有助于大家紧跟技术潮流,提升就业竞争力。
本书特色及主要内容
这是一本全方位介绍ClickHouse的专业技术书,本书的问世不仅缓解了目前ClickHouse学习资料匮乏的局面,也纠正了网络上部分对ClickHouse的错误解读。
本书从时代背景、发展历程、核心概念、基础功能及核心原理等几个方面全面且深入地对ClickHouse进行解读。通过阅读本书,你不仅可以一站式完成对ClickHouse的学习,还能得到许多一手信息(例如ClickHouse名称的由来)。
在行文方面,本书尽可能使用浅显易懂的语言,并通过大量演示案例引导读者深入学习。在核心部分,本着一图胜千言的原则,本书配有大量的示意图例以帮助读者加深理解。
从逻辑上说,本书主体分为三大部分共11章,各章节之间以循序渐进原则来安排。
第一部分 背景篇(第1~2章),从宏观角度描述了ClickHouse出现的时代背景、发展历程以及核心特点。
第1章 阐述了ClickHouse诞生的缘由和发展历程。
第2章 快速浏览了ClickHouse的核心特性和逻辑架构,并进一步探讨了它的成功秘诀。
第二部分 基础篇(第3~5章),从使用角度介绍了ClickHouse的基础用法。
第3章 介绍了ClickHouse的安装过程,并讲解了基础封装接口和内置工具,为后续内容讲解提供演示环境。
第4章 介绍了ClickHouse的基础概念和基本操作方法,包括数据的类型、数据表的定义、数据表的基本操作(增、删、改、移等)、数据分区的基本操作(查询、删除、复制、重置、装/卸载等)。同时也介绍了DML查询的基本用法。
第5章 从内置字典和外部扩展字典两个方面对ClickHouse数据字典的工作原理和操作方法进行了介绍,尤其是ClickHouse在数据字典方面的特殊之处,本书进行了详细剖析。
第三部分 原理篇(第6~11章),从原理角度解析了ClickHouse核心功能的运行机理。
第6章 全方位深度解读了MergeTree表引擎的工作原理,包括MergeTree的基础属性和物理存储结构,以及数据分区、一级索引、二级索引、数据存储和数据标记等重要特性。
第7章 全方位深度解读了MergeTree表引擎系列中5种常用变种引擎的核心逻辑和使用方法。
第8章 介绍了除MergeTree系列之外的其余5大类共18种表引擎的核心逻辑和使用方法。
第9章 按照ClickHouse解析SQL的顺序依次介绍了WITH、FROM、SAMPLE等10余种查询子句的用法。
第10章 对副本、分片和集群的核心工作原理和使用方法进行介绍,这是实现容灾机制的必备知识。
第11章 对ClickHouse的权限管理、熔断机制、数据备份和运行监控进行剖析,以求进一步完善ClickHouse在实际工作中的安全性和健壮性。
如何阅读本书
本书会涉及分布式数据库领域的相关知识,故在阅读本书前读者应具备基础的分布式数据库的知识。另外本书假定读者对使用Java、SQL编程也有一定了解,且熟悉OLAP、分布式、多线程、集群、副本、分片等概念。
本书为照顾初学者,包含基础知识部分。如果你已经熟练掌握ClickHouse的基础知识,可以略过第3~5章的部分内容。否则,建议你顺序阅读全书。
不论是哪种类型的读者,都建议阅读第1章的内容,因为这部分不仅从时代背景的角度解读了ClickHouse的发展历程,还揭露了它的两个小秘密。通过对第1章的阅读,你会看到一个更加丰富立体的ClickHouse。
与此同时,也强烈建议所有读者阅读第6章和第10章,因为这两章阐释了ClickHouse最为核心的部分,即MergeTree的核心原理,以及副本与分片的核心原理。通过阅读这两章,你对ClickHouse运行机理的理解会更加深刻,这将有助于你把ClickHouse运用得更加炉火纯青。
由于篇幅所限,本书没有包含ClickHouse函数、配置参数的内容。我认为,要学习这部分内容,查阅官方手册是一种更为高效的方式。
本书内容基于ClickHouse 19.17.4.11版本编写,演示时所用操作系统为CentOS 7.7。书中涉及的所有演示案例,均经过实际版本验证通过。
另外,为了帮助读者更好地理解和应用书中的知识点,本书提供了专用的演示代码和部分样例数据,大家可以根据需要自行下载(https://github.com/nauu/clickhousebook)。
勘误和支持
由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我特意创建了一个提供在线支持与应急方案的站点https://github.com/nauu/clickhousebook。你可以将书中的错误发布在Bug勘误表页面中,也可以将遇到的任何问题发布在Q&A页面,我将尽量在线上为你提供最满意的解答。
如果你有更多的宝贵意见,也欢迎发送邮件至出版社邮箱214399230@qq.com,期待能够得到你的真挚反馈。
同时,你也可以关注我的微信公众号chcave,我会在此定期分享ClickHouse的最新资讯、趣闻杂谈、使用经验等。
致谢
感谢我的家人。如果没有你们的悉心照顾和鼓励,我不可能完成本书。
感谢我的公司远光软件。远光软件为我提供了学习和成长的环境,书中的很多知识都来自我在远光软件的工作实践。
感谢我的挚友李根。谢谢你提出了许多宝贵的建议。
感谢我的同事兼伙伴—谢小明、彭一轩、殷雷、胡艺、陈雪莹、潘登、王涛、库生玉、李昂、何宇、张锐、陈泽华、李国威、杨柯、张琛、郑凤英、姜亚玮以及名单之外的更多朋友,感谢你们在工作中对我的照顾和支持,十分荣幸能够与你们同在一个富有激情与活力的团队。
感谢ClickHouse社区的伙伴—Ivan Blinkov、Alexey Milovidov、郭炜、郑天祺、张健、李本旺、高鹏、赵群、胡宸章、杨兆辉、丁晓坤、王金海以及名单之外的更多朋友,是你们的无私奉献促进了社区的发展,加速了ClickHouse的普及。
感谢华章鲜读的读者朋友(微信名称,排名不分先后)—濤、马尚、君Hou、renwei、Luyung、朱熊、Duke、lansane、Lithium、xchf、陈刚、路途、一念之间、辛、李海武以及名单之外的更多朋友,是你们提供的宝贵建议帮助我提升了书稿的质量。
感谢机械工业出版社华章分社的编辑杨福川老师、孙海亮老师、李艺老师,在这一年多的时间中始终支持我的写作,你们的鼓励和帮助引导我顺利完成全部书稿。

专家评论

在2017年易观举办的第一届OLAP大赛中,在40多支知名队伍中,使用ClickHouse的队伍成绩一直遥遥领先,ClickHouse因此成为这届大赛中最大的黑马。此后ClickHouse在各大互联网公司广泛使用,发展迅猛。但时至今日,关于ClickHouse的完整而系统的中文资料仍然匮乏,本书的出版填补了这一空白。品读几章后,我能感受到作者写作非常认真。为作者坚持写作的精神点赞。
—易观大数据平台总监/ Apache DolphinScheduler社区主要负责人 代立冬

曾经的 ClickHouse就像里海怪物,无比强大却让人难以捉摸,因此吓退了很多想要尝鲜的人。而本书以生动的行文风格,通过充分的背景铺垫、严谨的原理讲解,揭开了ClickHouse的神秘面纱,让它成为你能驾驭的 OLAP 利器。
—ClickHouse Contributor 胡宸章

本书对于从事数据架构、数据开发和数据分析工作的读者来说是一本非常有价值的书。ClickHouse作为一款“新鲜”的开源数据库,社区中的资料以俄语和英语版为主,中文资料匮乏。国内从业者若想使用,只能自己慢慢摸索,并进行大量测试。当时我就想,如果有一本书能对ClickHouse进行体系化的介绍,那会帮助我们少走很多弯路,并能快速吸取社区大量经验。
本书从开篇就深深地吸引了我。因为书中没有晦涩难懂的理论,也不是对社区资料的照搬翻译。从基础能力、核心原理到社区沉淀的实战经验,诠释出的是鲜活的场景,因此我把本书推荐给了我的团队。
能够与作者在ClickHouse社区中交流,能经常拜读到作者发表于“ClickHouse的秘密基地”公众号的文章,我感到非常荣幸。作者发表在公众号中的文章以幽默风趣的风格、拟人化的写作手法,将ClickHouse运行原理以故事的方式呈现出来,相信大家在品读之后都会有很大收获。
感谢作者让我在本书出版之前先睹为快。
—百分点研发总监 赵群

本书以BI的发展历史与趋势为背景,既介绍了ClickHouse的应用实践,又深入分析了它的架构设计和部分实现原理。因此本书既能够作为BI新手的入门指南,也能够作为中高级开发者的延伸读物,为中高级开发者实践高性能DB提供设计思路。推荐阅读。
—腾讯云数仓库与数据湖团队专家工程师 丁晓坤

上架指导

计算机\数据库

封底文字

ClickHouse可能是目前开源项目里运行得最快的OLAP引擎,它既强大又神秘,且让很多初学者无从下手。相信这本书的出现能很大程度上改变这种状况。从运行原理到使用方法再到安装部署和运维监控,本书详细介绍了关于ClickHouse的方方面面。对于ClickHouse的使用者、运维人员以及技术爱好者来说,本书都是很好的参考书。
——腾讯开源联盟主席、数据平台部总监/Apache Hadoop PMC 堵俊平

ClickHouse成为我们的AIOps项目装上的“极速引擎”,很大程度上解决了海量数据吞吐、低成本存储与快速分析的问题。从调研、测试到大规模使用,在这个过程中我们踩了很多坑,现在能有这样一本深入浅出、生动幽默地介绍ClickHouse的工具书,一定可以帮你快速上手这匹数据分析领域的“黑马”。
——新浪智能运维数据分析平台主管 高鹏

对于海量数据交互式分析,ClickHouse无疑是很好的选择。本书对ClickHouse的基本概念、架构和常用技巧进行了详细描述,尤其对ClickHouse的精华——MergeTree表引擎进行了深入讲解。推荐阅读。
——苏宁大数据高级架构师/ClickHouse Contributor 杨兆辉

本书内容专业且详尽,特别是介绍MergeTree的相关章节。你值得拥有!
——趣头条大数据平台负责人 王金海

本书深入浅出,全面介绍了ClickHouse的使用方法与核心原理,是学习ClickHouse的必备资料。推荐大家阅读本书。
——祺曜互娱资深技术专家 李根

推荐序

Foreword 推荐序一
We released ClickHouse in open-source in 2016, four years ago. And as far as I know, this book is going to be the first published book on ClickHouse. Why do I appreciate that so much? When we released ClickHouse, we had only one goal in mind, to give people the fastest analytical DBMS in the world. But now, after a few years, I see many more opportunities. We can make ClickHouse an example of the most community and developers friendly open-source product.
According to Eric S. Raymond, there are two models of software development:the “Cathedral” and the “Bazaar” model. In the first model, the software is developed by a closed team of a few developers who “do the right thing”. An example of the “Cathedral” model is SQLite that is developed mostly by a single person—Richard Hipp. In contrast, the “Bazaar” model is trying to benefit by invitation of as many independent developers as possible. An example of the “Bazaar” model is the Linux kernel. For ClickHouse, we practice the “Bazaar” model. But this model requires many efforts in building the community. These efforts are summarized in the following 8 points.
(1)The development process must be as open as possible, no secrets should be kept; we should do everything in public.
(2)The codebase must be well documented and understandable even for amateur developers. And amateur developers should be able to learn good practices from ClickHouse.
(3)We should be eager to try experimental algorithms and libraries, to be on edge and invite more enthusiastic people. As an example, today is 2020, so we are using C++20 language standard.
(4)We should move fast. Try 10 algorithms, throw off 9 of 10, and keep moving forward.
(5)To keep the codebase sane, we should define high-quality standards. And enforce these standards by automated tools in a continuous integration process, not by arguing with people.
(6)We should maintain a high accept rate of contributions. Even if a contribution is not ready, we should actively help each other. Even if the code is wrong, we keep the idea and make it right. Contributors should feel their efforts well received, and they should be proud of their contributions.
(7) ClickHouse is for everyone. You can make a product on top of ClickHouse, and use it in your company, and we will welcome it. We love our users, and we are interested in ClickHouse widespread in any possible way.
(8)We need to provide good tutorials and educational materials for potential contributors. I hope that this book helps people to understand ClickHouse architecture.
The Cathedral model is easier to manage, but the Bazaar model definitely gives more fun!
We can make ClickHouse the best educational and research product in the area of database engineering.
If you look at the architectural details of ClickHouse, you will find that most of them are nothing new. Most of them are already well researched and implemented in some other systems. What’s unique in ClickHouse is the combination of these choices, how well they are integrated together, and the attention to implementation details. There are multiple books on computer science, on managing data, and so on. But you will not find many that describe the internals, the guts, and low-level details that differentiate one system from another. ClickHouse can be considered as a collection of good choices in implementation and also as a playground for experiments. And I hope that this book will guide you through these details.
ClickHouse should become a standard of good usability among database management systems.
A database management system is not an easy product to develop. And people get used to that it is neither easy to work with. Distributed systems are even harder. Working with a typical distributed system is a painful experience from the start. But we can try to break this stereotype. At least we can eliminate typical obstacles. ClickHouse is easy to set up and run, so you can start working in minutes. But what about further details like data replication, distributed set up, choosing of table engines, and indexes? Couldn’t they be so simple too? Probably not. But at least they can be understandable. This book covers these details, and you will understand what is under the hood of ClickHouse.

Alexey Milovidov
Head of ClickHouse Development Team at Yandex
我们在2016年发布了ClickHouse的开源版本。据我所知,这本书将是关于 ClickHouse 的第一本正式出版的图书,对此我非常激动。因为当我们发布 ClickHouse 的时候,心中只有一个目标,即向人们提供世界上最快的分析型数据库。而现在,我看到了更多的可能性。我们可以把ClickHouse打造成面向社区与开发者的最友好的开源产品。
根据Eric S.Raymond的理论,目前主要有两种软件开发模式— Cathedral(大教堂) 模式与Bazaar(集市)模式。在Cathedral模式中,软件由一个封闭的开发者小组进行开发。使用该模式开发的典型产品就是SQLite数据库,它是由Richard Hipp一个人开发的。而Bazaar模式则是邀请尽可能多的独立开发者进行开发,Linux内核就是采用这种模式开发出来的。对ClickHouse而言,我们采用了Bazaar模式。采用Bazaar模式,需要花费很大的精力来维护开发社区。对于在开发ClickHouse的过程中采用Bazaar模式,我总结出了以下 8 点经验。
(1)整个开发流程完全公开透明,没有任何秘密。
(2)有帮助理解代码的、新手开发者也可看懂的详细文档,这样新手开发者可从ClickHouse代码中学到有价值的实践经验。
(3)乐于尝试新的算法与第三方库,以保持ClickHouse的先进性,也只有这样才能吸引更多的开发热爱者。例如,刚刚进入2020年,我们就在ClickHouse中应用了C++20标准。
(4)虽然需要快速迭代ClickHouse,但是我们依然不会放低要求,比如我们为了使用1个算法,就会至少尝试10个算法。而且在选择了某个算法后,后续还会继续尝试其他更多算法,以便下次迭代时使用。
(5)为了保证代码的质量,我们始终向高标准看齐,并使用工具来确保这些标准得以实施,而不是人为干预。
(6)对于贡献者提交的补丁,我们保证有比较高的接收率。即使某个补丁还没有完成,我们也会适当参与,为贡献者提供帮助。若补丁的代码中有错误,我们会尝试修复。这样补丁的贡献者会感受到他们的努力获得了认可,并因此感到自豪。
(7) ClickHouse 是提供给所有人的,你甚至可以用 ClickHouse来实现其他产品,也可以把它部署在自己的公司。我们爱我们的用户,我们对ClickHouse在任何场景下的应用都表示支持,并且有兴趣了解你的使用情况。
(8)我们希望为潜在的贡献者提供高质量的教程和参考资料。我很高兴看到这本书上市,因为它能够帮助读者理解ClickHouse的架构。
Cathedral 模式便于管理,但是 Bazaar 模式显然更有意思! 我们可以把 ClickHouse 打造为最适合用于数据库教学与研究的产品。如果细看ClickHouse的架构,你会发现其中没有什么新颖的技术,其中使用的大部分技术都是经过了多年研究并已在其他数据库中实现了的成熟技术。ClickHouse 独特的地方在于其高效地将这些技术结合了起来并灵活地加以运用,在此过程中我们十分注重具体的实现方式与细节。许多图书在介绍计算机科学或数据管理的知识时并不会在细节方面进行展开,也不会对不同的系统针对底层实现进行对比,为了对此进行补充,ClickHouse在上述两方面进行了尝试。作为一个比较好的技术实现集合,ClickHouse特别适合用来在细节方面做性能优化实验。我希望这本书能够引导你了解这些技术细节。
ClickHouse 可以作为数据库中易用性的代表。数据库系统并不是一款容易开发的产品,这也使得人们认为数据库开发上手很难,分布式数据库的开发就更难了,甚至在刚开始使用分布式系统时会觉得非常烦琐。在开发ClickHouse的过程中,我们尝试打破这些固有的认识,至少扫清了一些常见的障碍。ClickHouse 上手非常容易,你可以在几分钟内安装好并开始使用。然而如果你需要使用更多的功能,如数据副本、分布式、不同的表引擎、索引等,就不会那么简单了,但这些功能在理解与学习上相对于其他数据库还是简单的。本书介绍了理解和学习ClickHouse的方法,也介绍了ClickHouse的诸多细节。通过这本书你将会透彻理解ClickHouse是如何运行的。

Alexey Milovidov
Yandex公司ClickHouse开发团队负责人
(郑天祺译)



Foreword 推荐序二
随着数据科技的进步,数据分析师早已不再满足于传统的T+1式报表或需要提前设置好维度与指标的OLAP查询。数据分析师更希望使用可以支持任意指标、任意维度并秒级给出反馈的大数据Ad-hoc查询系统。这对大数据技术来说是一项非常大的挑战,传统的大数据查询引擎根本无法做到这一点。由俄罗斯的Yandex公司开源的ClickHouse脱颖而出。在第一届易观OLAP大赛中,在用户行为分析转化漏斗场景里,ClickHouse比Spark快了近10倍。在随后几年的大赛中,面对各类新的大数据引擎的挑战,ClickHouse一直稳稳地坐在冠军宝座上。同时在各种OLAP查询引擎评测中,ClickHouse单表查询的速度力压现在流行的各大数据库引擎,尤其是Ad-hoc查询速度一直遥遥领先,因此被国内大量用户和爱好者广泛用在即席查询场景当中。
本书作者朱凯是ClickHouse华人社区的重要成员,多次在ClickHouse相关会议上进行技术分享,是国内ClickHouse领域的知名专家。朱凯在本书中给大家详细介绍了ClickHouse
的使用方法、基本原理,以帮助初次使用者快速上手,搭建一套基于ClickHouse的即席查询引擎。
纵观数据科技发展史,从数据仓库、数据挖掘开始,逐步发展到大数据、流数据、人工智能、Ad-hoc查询,前后经历了30多年,每次技术升级都让现实世界距离数据世界更近一步,各种新技术的引进也在快速改变着整个世界。这是一本关于ClickHouse的入门书,可以帮你从过去的ETL数据处理的世界进入Ad-hoc查询的世界。
欢迎大家通过www.clickhouse.com.cn加入ClickHouse华人社区,和我们一起沟通交流。

郭炜
ClickHouse华人社区发起人,易观CTO
Apache Dolphin Scheduler PPMC



推荐序三 Foreword
数据库作为数据存储与计算的核心组件,在大数据时代扮演了不可替代的核心角色。面对源源不断的新数据与层出不穷的应用场景,各式各样的数据库系统应运而生。
ClickHouse 源于俄罗斯的Yandex 公司对数据聚合的实时需求,并逐步发展为面向现代 CPU 架构的高性能SQL数据库。与目前基于Hadoop的解决方案不同,ClickHouse 尽可能减少了第三方依赖软件,以单二进制文件形式发布,能够快速完成系统部署。ClickHouse汇聚了大量行业领先的优化技术,这使得它比其他数据库在运行方面要快上许多倍。ClickHouse独特的查询语言扩展以及大量的内置处理函数能够高效地完成复杂数据分析。ClickHouse代码工整,提供了完整的用于二次开发的接口,因此受到不少开发人员的追捧,社区已经出现了不少针对元数据管理、分布式计算以及存储管理的扩展项目。
看到这本专门为中国读者撰写的关于ClickHouse的图书即将顺利上市,我非常高兴。这无疑能促进中国用户更好地了解并使用 ClickHouse,同时能为ClickHouse中文社区的发展贡献力量。因此,我要感谢所有为本书出版做出贡献的人,也要感谢广大读者对 ClickHouse的喜爱,希望ClickHouse能够在中国获得更好的发展!

郑天祺(Amos Bird)博士
ClickHouse贡献者


Foreword 推荐序四
作为面向OLAP领域的新一代解决方案,ClickHouse与OLTP系统有着显著不同。它并不谋求多个节点之间的事务一致性(ACID),而是以其独特、卓越的性能为切入点,以实现用户在海量数据下完成高效多维分析任务为诉求,而这也正是一款优秀的OLAP产品的特质(FASMI)。相信未来它会是大数据OLAP产品的主流选择。
本书作者从用户视角出发,由浅入深地对ClickHouse进行了详细讲解,涵盖从内部原理到用户使用的方方面面。对于想要了解并使用ClickHouse的用户而言,这将是一本很好的参考书;对于已经了解并使用ClickHouse的用户而言,这也是一本可供时时翻阅的进阶读物。

张健(WinterZhang)
青云数据库工程师,ClickHouse贡献者


推荐序五 Foreword
开源技术早已成为整个软件行业的基石和创新来源。开源技术的普惠性,有效降低了技术落地的门槛。ClickHouse正是一款在大数据实时分析领域为大数据OLAP而生的优秀开源软件。
由于ClickHouse具有卓越的分析性能、极好的线性伸展和扩容性以及丰富的功能等,近些年,越来越多的企业开始将它作为实时分析引擎来使用。无论是在大数据领域还是在DevOps领域,只要涉及在线分析场景,ClickHouse都能通过它那极致的性能占有一席之地。
ClickHouse虽然年轻,但自开源以来,其社区一直保持着很高的活跃度,开发者与用户遍布全球各地。相信未来它会是大数据实时分析领域的主流选择。
本书作者从用户视角出发,剖析了ClickHouse的内部运行原理,并且对其功能特性进行了详细讲解。对于想了解ClickHouse的开发者和用户来说,这将会是一本很不错的学习指导书。

李本旺(sundyli)
BIGO 数据架构师, ClickHouse贡献者

图书目录

推荐序一
推荐序二
推荐序三
推荐序四
推荐序五
赞誉
前言
第1章 ClickHouse的前世今生1
1.1 传统BI系统之殇2
1.2 现代BI系统的新思潮2
1.3 OLAP常见架构分类4
1.4 OLAP实现技术的演进6
1.5 一匹横空出世的黑马7
1.5.1 天下武功唯快不破8
1.5.2 社区活跃8
1.6 ClickHouse的发展历程8
1.6.1 顺理成章的MySQL时期9
1.6.2 另辟蹊径的Metrage时期10
1.6.3 自我突破的OLAPServer时期10
1.6.4 水到渠成的ClickHouse时代11
1.7 ClickHouse的名称含义12
1.8 ClickHouse适用的场景12
1.9 ClickHouse不适用的场景13
1.10 有谁在使用ClickHouse13
1.11 本章小结13
第2章 ClickHouse架构概述14
2.1 ClickHouse的核心特性14
2.1.1 完备的DBMS功能15
2.1.2 列式存储与数据压缩15
2.1.3 向量化执行引擎16
2.1.4 关系模型与SQL查询17
2.1.5 多样化的表引擎18
2.1.6 多线程与分布式18
2.1.7 多主架构19
2.1.8 在线查询19
2.1.9 数据分片与分布式查询 19
2.2 ClickHouse的架构设计20
2.2.1 Column与Field20
2.2.2 DataType20
2.2.3 Block与Block流21
2.2.4 Table22
2.2.5 Parser与Interpreter22
2.2.6 Functions 与Aggregate Functions22
2.2.7 Cluster与Replication23
2.3 ClickHouse为何如此之快24
2.3.1 着眼硬件,先想后做24
2.3.2 算法在前,抽象在后24
2.3.3 勇于尝鲜,不行就换25
2.3.4 特定场景,特殊优化25
2.3.5 持续测试,持续改进25
2.4 本章小结26
第3章 安装与部署27
3.1 ClickHouse的安装过程27
3.1.1 环境准备27
3.1.2 安装ClickHouse28
3.2 客户端的访问接口31
3.2.1 CLI31
3.2.2 JDBC33
3.3 内置的实用工具35
3.3.1 clickhouse-local35
3.3.2 clickhouse-benchmark36
3.4 本章小结38
第4章 数据定义39
4.1 ClickHouse的数据类型39
4.1.1 基础类型40
4.1.2 复合类型45
4.1.3 特殊类型48
4.2 如何定义数据表49
4.2.1 数据库49
4.2.2 数据表50
4.2.3 默认值表达式52
4.2.4 临时表53
4.2.5 分区表54
4.2.6 视图55
4.3 数据表的基本操作56
4.3.1 追加新字段56
4.3.2 修改数据类型56
4.3.3 修改备注56
4.3.4 删除已有字段57
4.3.5 移动数据表57
4.3.6 清空数据表58
4.4 数据分区的基本操作58
4.4.1 查询分区信息58
4.4.2 删除指定分区58
4.4.3 复制分区数据59
4.4.4 重置分区数据60
4.4.5 卸载与装载分区60
4.4.6 备份与还原分区61
4.5 分布式DDL执行61
4.6 数据的写入61
4.7 数据的删除与修改63
4.8 本章小结64
第5章 数据字典65
5.1 内置字典65
5.1.1 内置字典配置说明65
5.1.2 使用内置字典67
5.2 外部扩展字典67
5.2.1 准备字典数据67
5.2.2 扩展字典配置文件的元素组成68
5.2.3 扩展字典的数据结构69
5.2.4 扩展字典的类型71
5.2.5 扩展字典的数据源79
5.2.6 扩展字典的数据更新策略84
5.2.7 扩展字典的基本操作85
5.3 本章小结87
第6章 MergeTree原理解析88
6.1 MergeTree的创建方式与存储结构89
6.1.1 MergeTree的创建方式89
6.1.2 MergeTree的存储结构91
6.2 数据分区93
6.2.1 数据的分区规则93
6.2.2 分区目录的命名规则94
6.2.3 分区目录的合并过程95
6.3 一级索引98
6.3.1 稀疏索引98
6.3.2 索引粒度99
6.3.3 索引数据的生成规则99
6.3.4 索引的查询过程101
6.4 二级索引102
6.4.1 granularity与index_granularity的关系104
6.4.2 跳数索引的类型105
6.5 数据存储106
6.5.1 各列独立存储106
6.5.2 压缩数据块106
6.6 数据标记109
6.6.1 数据标记的生成规则109
6.6.2 数据标记的工作方式110
6.7 对于分区、索引、标记和压缩数据的协同总结113
6.7.1 写入过程113
6.7.2 查询过程114
6.7.3 数据标记与压缩数据块的对应关系114
6.8 本章小结116
第7章 MergeTree系列表引擎117
7.1 MergeTree117
7.1.1 数据TTL117
7.1.2 多路径存储策略121
7.2 ReplacingMergeTree128
7.3 SummingMergeTree130
7.4 AggregatingMergeTree134
7.5 CollapsingMergeTree137
7.6 VersionedCollapsingMergeTree140
7.7 各种MergeTree之间的关系总结141
7.7.1 继承关系141
7.7.2 组合关系143
7.8 本章小结144
第8章 其他常见类型表引擎145
8.1 外部存储类型145
8.1.1 HDFS145
8.1.2 MySQL149
8.1.3 JDBC150
8.1.4 Kafka152
8.1.5 File157
8.2 内存类型158
8.2.1 Memory159
8.2.2 Set159
8.2.3 Join160
8.2.4 Buffer162
8.3 日志类型164
8.3.1 TinyLog164
8.3.2 StripeLog165
8.3.3 Log166
8.4 接口类型167
8.4.1 Merge167
8.4.2 Dictionary168
8.4.3 Distributed169
8.5 其他类型170
8.5.1 Live View170
8.5.2 Null171
8.5.3 URL171
8.6 本章小结173
第9章 数据查询174
9.1 WITH子句175
9.2 FROM子句177
9.3 SAMPLE子句178
9.4 ARRAY JOIN子句180
9.5 JOIN子句183
9.5.1 连接精度184
9.5.2 连接类型186
9.5.3 多表连接189
9.5.4 注意事项190
9.6 WHERE与PREWHERE子句190
9.7 GROUP BY子句193
9.7.1 WITH ROLLUP194
9.7.2 WITH CUBE194
9.7.3 WITH TOTALS195
9.8 HAVING子句195
9.9 ORDER BY子句197
9.10 LIMIT BY子句198
9.11 LIMIT子句199
9.12 SELECT子句200
9.13 DISTINCT子句200
9.14 UNION ALL子句202
9.15 查看SQL执行计划203
9.16 本章小结207
第10章 副本与分片208
10.1 概述208
10.2 数据副本209
10.2.1 副本的特点212
10.2.2 ZooKeeper的配置方式212
10.2.3 副本的定义形式213
10.3 ReplicatedMergeTree原理解析214
10.3.1 数据结构215
10.3.2 副本协同的核心流程217
10.4 数据分片228
10.4.1 集群的配置方式228
10.4.2 基于集群实现分布式DDL232
10.5 Distributed原理解析236
10.5.1 定义形式236
10.5.2 查询的分类237
10.5.3 分片规则238
10.5.4 分布式写入的核心流程239
10.5.5 分布式查询的核心流程245
10.6 本章小结251
第11章 管理与运维252
11.1 用户配置252
11.1.1 用户profile252
11.1.2 配置约束253
11.1.3 用户定义254
11.2 权限管理257
11.2.1 访问权限257
11.2.2 查询权限258
11.2.3 数据行级权限259
11.3 熔断机制261
11.4 数据备份263
11.4.1 导出文件备份263
11.4.2 通过快照表备份264
11.4.3 按分区备份264
11.5 服务监控265
11.5.1 系统表266
11.5.2 查询日志267
11.6 本章小结270

教学资源推荐
作者: [美] 亚伯拉罕·西尔伯沙茨 (Abraham Silberschatz) [美] 亨利·F. 科思 (Henry F. Korth) [印] S. 苏达尔尚(S. Sudarshan) 著
作者: 沈楠 孔令志 王立伟 编著 沈朝辉 主审
作者: Jeffrey D.Ullman, Jennifer Widom
参考读物推荐
作者: [英]阿列克萨·武科蒂奇(Aleksa Vukotic),[美]尼基·瓦特(Nicki Watt),[美]塔里克·阿贝卓布(Tareq Abedrabbo),[美]多米尼克·福克斯(Dominic Fox),[美]乔纳斯·帕特纳(Jonas Partner)著
作者: 陈畅亮 吴一晴 著
作者: 红丸 著