Preface 前言
为何写作本书
ClickHouse在2016年发布了开源版本。自开源以来,社区一直保持着很高的活跃度,开发者与用户遍布全球各地。目前,ClickHouse是大数据实时分析领域的主流选择之一。ClickHouse的目标是向人们提供世界上最快的分析型数据库。在各种OLAP查询引擎评测中,ClickHouse的查询性能横扫各大OLAP数据库引擎,尤其是Ad Hoc即席查询性能,一直遥遥领先。因此,ClickHouse被广泛应用于即席查询业务场景中。
在学习和使用ClickHouse的过程中,我发现我越来越喜欢ClickHouse,它的设计思想非常优秀,代码和架构都值得深入研究。ClickHouse团队精益求精的精神更值得我们每个人学习。虽然要快速迭代ClickHouse,但是ClickHouse团队依然不会放低要求,比如为了使用1个算法,会至少尝试10个算法,而且在选择了某个算法后,后续还会继续尝试其他更多算法,以便下次迭代时使用。正是由于这种精益求精、追求极致的态度,才有了ClickHouse的极致性能。感谢ClickHouse团队!
本书可以说是我对ClickHouse项目实践和学习思考过程的粗浅总结。我希望把这些学习经验和总结,分享给更多需要使用ClickHouse来解决实际业务问题的朋友们。同时,通过写作,我加深了对ClickHouse功能特性和架构实现原理的理解,也深刻体会到了学无止境的含义。写书的过程也是我系统学习与思考ClickHouse的过程,如果这本书能够对你有所帮助或者启发,我将不胜欣慰。
本书主要特点
本书图文并茂、由浅入深地介绍了ClickHouse的前世今生、业界使用生态、基础知识和实现原理的诸多细节,以及ClickHouse在企业级大数据分析业务中的项目实战。本书非常注重实用性,给出了大量的操作实例和项目实战案例。
通过阅读这本书,你将理解ClickHouse是如何运行的,同时,你将掌握如何在实际业务项目中使用ClickHouse解决大数据实时分析问题。阅读本书,你将体验一场充实、惊奇的企业级大数据分析引擎设计与开发实战之旅。赶快开启旅程吧!
本书读者对象
本书是一本从入门到实战再到进阶,全方位介绍ClickHouse开发的专业技术书,适合的读者对象主要为:
❑计算机、大数据、人工智能等相关专业的师生;
❑对企业数字化、大数据OLAP分析引擎、数据库等领域感兴趣的初学者;
❑大数据从业者、BI工程师、数据分析师、程序员等。
如何阅读本书
本书共10章。我希望通过简练清晰的表述和丰富实用的实例说明,细致全面地讲清楚ClickHouse的基础知识和丰富的功能特性,以及如何使用ClickHouse进行实际业务项目的开发实战。通过本书,你将学会如何在几分钟内安装好ClickHouse环境并开始使用。然后,你将学习如何使用ClickHouse的更多功能,如基本数据类型、函数、SQL语法、稀疏索引、不同的表引擎、数据副本与分片、分布式库表管理查询和集群运维监控等。
本书整体上是按照由基础知识到实现原理再到项目实战的写作思路,循序渐进地铺展开的。如果你对ClickHouse已经有一定了解,需要进行实际的项目实践,可以直接阅读第7~10章。如果你对ClickHouse还不是很了解,那么建议你按照本书的章节顺序阅读。
各章的主要内容如下。
第1章带领读者快速进入ClickHouse的世界,让读者全面了解ClickHouse的前世今生和核心特性。主要内容包括ClickHouse是什么,具有哪些特性,适合哪些应用场景等。通过该章,你将掌握ClickHouse的核心特性,了解列存储、数据压缩、稀疏索引等存储层设计原理,以及MPP架构、向量化查询执行引擎、动态代码生成等计算层的主要设计思想与原理。
第2章将走进ClickHouse世界,进行具体操作实践,包括安装、部署、系统配置、客户端连接、ClickHouse基础命令行操作等。
第3章介绍ClickHouse基础数据类型,包括数值类型、字符串类型和时间类型等基本内容,以及这些基础数据类型的常用函数操作。
第4章介绍ClickHouse高级数据类型,主要包括数组、元组和嵌套等复合数据类型。另外,还介绍了如何使用聚合函数类型动态自定义类型,比如说Bitmap类型等。
第5章介绍ClickHouse函数,主要包括算术函数、数组函数、字符串函数、条件函数、时间函数、数学函数、聚合函数、窗口函数、空值函数和常用算子等。
第6章介绍ClickHouse SQL基础和查询配置等相关内容,主要包括使用SQL来创建数据库、表、视图,新增数据库用户账户、角色等,并进行库表权限管理;同时,介绍了如何向ClickHouse表中插入数据,并对表中的数据进行查询,以及各种SQL查询子句的用法;最后,介绍了如何通过EXPLAIN语句查看SQL执行计划以及执行流程。
第7章介绍如何使用Spring Boot来连接ClickHouse服务器,一步步实现前后端的开发和集成测试的全过程。
第8章介绍如何使用ClickHouse的Bitmap高级数据类型来实现超大规模数据场景(千亿、万亿级)用户画像标签圈人和人群画像洞察。主要内容包括DMP的基本概念、事实、维度、指标与标签的基本知识,如何使用ClickHouse Bitmap实现支持任意维度标签组合的人群圈选,以及具体实现原理和圈选洞察SQL实例。
第9章以清晰、详细的步骤展示如何创建具有多个节点的ClickHouse集群;同时,介绍如何在ClickHouse集群上创建分布式数据库、分布式表和本地表,以及数据的读写操作方法和原理;最后,重点讲解ClickHouse集群分片与副本的工作原理及分布式查询等内容。
第10章介绍如何从0到1使用Docker安装和配置Grafana、clickhouse-exporter与Prometheus,并搭建一个ClickHouse集群监控平台;同时,还介绍了如何自定义指标面板以及集群常用监控指标等实用内容。
勘误
虽然在本书写作过程中我尽力追求简洁正确、清晰流畅地表达内容,但限于自身水平,可能仍有错误与疏漏之处,还望各位读者不吝指正。你可以在https://github.com/ClickHouse-InAction/book_issues/issues提Issue,我将在线上为你提供解答。
关于本书的任何问题、意见或者建议,你都可以通过邮件universsky@163.com与我交流。
致谢
在本书的写作和出版过程中,我得到了很多人的帮助和陪伴。
首先感谢我的妻子和两个可爱的孩子。正是有了你们的陪伴,我的工作和生活才更加有意义。我还要感谢我的父母。虽然你们可能不知道我写的是什么,但是正是有了你们的辛勤养育,我才能长成今天的我。
我衷心地感谢本书的编辑杨福川老师和李艺老师。在本书的写作过程中,你们耐心细致地对稿件进行了详尽、细致的审阅和批注,提出了很多宝贵的修改建议,也给予了我极大的鼓励,才让我最终完成了这本书。同时,我还要感谢本书出版过程中所有付出辛勤劳动的机械工业出版社的工作人员。
在此,我还要特别感谢朱金清、刘兵兵、肖玉哲、张小侠、刘杰、罗光、郭宇、梁莹莹、彭家学等亲爱的同事们和朋友们(还有很多,在此就不一一列出了),非常感谢你们能够抽出宝贵时间审阅本书,同时给出了本书内容的勘误,倾情为本书写了推荐语。能与你们成为同事和朋友,是我莫大的荣幸。
感谢在工作学习旅程中认识的所有师长、前辈、朋友和同事,能够认识你们并与你们一起学习、共事,是我的荣幸。
快乐生活,快乐学习,快乐分享,快乐实践,知行合一。
最后,祝大家阅读愉快!
陈光剑
2023年4月于杭州