ClickHouse入門、實(shí)戰(zhàn)與進(jìn)階
定 價(jià):139 元
叢書名:數(shù)據(jù)庫(kù)技術(shù)叢書
- 作者:陳光劍著
- 出版時(shí)間:2023/6/1
- ISBN:9787111727170
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.13
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書是ClickHouse領(lǐng)域的集大成之作,從基礎(chǔ)知識(shí)、實(shí)現(xiàn)原理、項(xiàng)目實(shí)戰(zhàn)、擴(kuò)展應(yīng)用4個(gè)維度全面展開,表述簡(jiǎn)練清晰、案例豐富實(shí)用,既可以作為入門的標(biāo)準(zhǔn)參考書,又適合作為案頭速查手冊(cè)。書中內(nèi)容是作者在阿里巴巴、字節(jié)跳動(dòng)多年實(shí)戰(zhàn)經(jīng)驗(yàn)的總結(jié),得到了字節(jié)跳動(dòng)和阿里巴巴9位大數(shù)據(jù)專家的高度評(píng)價(jià)。
全書共10章,主要內(nèi)容如下:
第1~3章整體介紹ClickHouse概念、特性、應(yīng)用場(chǎng)景、技術(shù)生態(tài)、快速入門和基礎(chǔ)數(shù)據(jù)類型等基礎(chǔ)內(nèi)容,目的是從本質(zhì)上揭開ClickHouse高性能背后的秘密,幫助讀者快速上手實(shí)踐。
第4~6章重點(diǎn)講解ClickHouse的高級(jí)數(shù)據(jù)類型、函數(shù)和SQL查詢語法與配置實(shí)踐等進(jìn)階內(nèi)容,通過該部分內(nèi)容的閱讀和學(xué)習(xí),你將全面掌握ClickHouse核心功能的使用方法和技巧。
第7~10章從企業(yè)級(jí)項(xiàng)目實(shí)戰(zhàn)的角度出發(fā),詳細(xì)解析ClickHouse在實(shí)際業(yè)務(wù)項(xiàng)目中的使用,主要包括基于Spring Boot開發(fā)ClickHouse SQL查詢工具、基于ClickHouse Bitmap實(shí)現(xiàn)DMP用戶畫像標(biāo)簽圈選人、基于ZooKeeper搭建ClickHouse分布式集群、基于Grafana搭建ClickHouse集群監(jiān)監(jiān)控平臺(tái)等相關(guān)內(nèi)容。通過該部分內(nèi)容的閱讀學(xué)習(xí),你將掌握ClickHouse企業(yè)級(jí)項(xiàng)目實(shí)戰(zhàn)開發(fā)的方方面面。
本書非常注重實(shí)用性和實(shí)戰(zhàn)性,不僅在各個(gè)知識(shí)點(diǎn)都輔有大量的實(shí)際案例、圖表說明和小貼士,而且還有多個(gè)綜合性的項(xiàng)目案例貫穿全書。
(1)作者背景資深:現(xiàn)就職于字節(jié)跳動(dòng),曾就職于阿里巴巴,主要從事企業(yè)智能數(shù)字化經(jīng)營(yíng)管理、電商智能數(shù)字化運(yùn)營(yíng)等系統(tǒng)架構(gòu)設(shè)計(jì)和研發(fā)工作。
(2)作者經(jīng)驗(yàn)豐富:作者在大數(shù)據(jù)、后端開發(fā)和架構(gòu)領(lǐng)域有10余年研發(fā)和管理經(jīng)驗(yàn),積累非常深厚。
(3)內(nèi)容系統(tǒng)全面:從基礎(chǔ)知識(shí)、實(shí)現(xiàn)原理、項(xiàng)目實(shí)戰(zhàn)、擴(kuò)展應(yīng)用4個(gè)維度全面展開,是ClickHouse領(lǐng)域集大成之作。
(4)注重實(shí)用實(shí)戰(zhàn):不僅在各個(gè)知識(shí)點(diǎn)都輔有大量的實(shí)際案例、圖表說明和小貼士,而且還有多個(gè)綜合性的項(xiàng)目案例貫穿全書。
為何寫作本書
ClickHouse在2016年發(fā)布了開源版本。自開源以來,社區(qū)一直保持著很高的活躍度,開發(fā)者與用戶遍布全球各地。目前,ClickHouse是大數(shù)據(jù)實(shí)時(shí)分析領(lǐng)域的主流選擇之一。ClickHouse的目標(biāo)是向人們提供世界上快的分析型數(shù)據(jù)庫(kù)。在各種OLAP查詢引擎評(píng)測(cè)中,ClickHouse的查詢性能橫掃各大OLAP數(shù)據(jù)庫(kù)引擎,尤其是Ad Hoc即席查詢性能,一直遙遙領(lǐng)先。因此,ClickHouse被廣泛應(yīng)用于即席查詢業(yè)務(wù)場(chǎng)景中。
在學(xué)習(xí)和使用ClickHouse的過程中,我發(fā)現(xiàn)我越來越喜歡ClickHouse,它的設(shè)計(jì)思想非常優(yōu)秀,代碼和架構(gòu)都值得深入研究。ClickHouse團(tuán)隊(duì)精益求精的精神更值得我們每個(gè)人學(xué)習(xí)。雖然要快速迭代ClickHouse,但是ClickHouse團(tuán)隊(duì)依然不會(huì)放低要求,比如為了使用1個(gè)算法,會(huì)至少嘗試10個(gè)算法,而且在選擇了某個(gè)算法后,后續(xù)還會(huì)繼續(xù)嘗試其他更多算法,以便下次迭代時(shí)使用。正是由于這種精益求精、追求極致的態(tài)度,才有了ClickHouse的極致性能。感謝ClickHouse團(tuán)隊(duì)!
本書可以說是我對(duì)ClickHouse項(xiàng)目實(shí)踐和學(xué)習(xí)思考過程的粗淺總結(jié)。我希望把這些學(xué)習(xí)經(jīng)驗(yàn)和總結(jié),分享給更多需要使用ClickHouse來解決實(shí)際業(yè)務(wù)問題的朋友們。同時(shí),通過寫作,我加深了對(duì) ClickHouse功能特性和架構(gòu)實(shí)現(xiàn)原理的理解,也深刻體會(huì)到了學(xué)無止境的含義。寫書的過程也是我系統(tǒng)學(xué)習(xí)與思考ClickHouse的過程,如果這本書能夠?qū)δ阌兴鶐椭蛘邌l(fā),我將不勝欣慰。
本書主要特點(diǎn)
本書圖文并茂、由淺入深地介紹了ClickHouse的前世今生、業(yè)界使用生態(tài)、基礎(chǔ)知識(shí)和實(shí)現(xiàn)原理的諸多細(xì)節(jié),以及ClickHouse在企業(yè)級(jí)大數(shù)據(jù)分析業(yè)務(wù)中的項(xiàng)目實(shí)戰(zhàn)。本書非常注重實(shí)用性,給出了大量的操作實(shí)例和項(xiàng)目實(shí)戰(zhàn)案例。
通過閱讀這本書,你將理解ClickHouse是如何運(yùn)行的,同時(shí),你將掌握如何在實(shí)際業(yè)務(wù)項(xiàng)目中使用ClickHouse解決大數(shù)據(jù)實(shí)時(shí)分析問題。閱讀本書,你將體驗(yàn)一場(chǎng)充實(shí)、驚奇的企業(yè)級(jí)大數(shù)據(jù)分析引擎設(shè)計(jì)與開發(fā)實(shí)戰(zhàn)之旅。趕快開啟旅程吧!
本書讀者對(duì)象
本書是一本從入門到實(shí)戰(zhàn)再到進(jìn)階,全方位介紹ClickHouse開發(fā)的專業(yè)技術(shù)書,適合的讀者對(duì)象主要為:
計(jì)算機(jī)、大數(shù)據(jù)、人工智能等相關(guān)專業(yè)的師生;
對(duì)企業(yè)數(shù)字化、大數(shù)據(jù)OLAP分析引擎、數(shù)據(jù)庫(kù)等領(lǐng)域感興趣的初學(xué)者;
大數(shù)據(jù)從業(yè)者、BI工程師、數(shù)據(jù)分析師、程序員等。
如何閱讀本書
本書共10章。我希望通過簡(jiǎn)練清晰的表述和豐富實(shí)用的實(shí)例說明,細(xì)致全面地講清楚ClickHouse的基礎(chǔ)知識(shí)和豐富的功能特性,以及如何使用ClickHouse進(jìn)行實(shí)際業(yè)務(wù)項(xiàng)目的開發(fā)實(shí)戰(zhàn)。通過本書,你將學(xué)會(huì)如何在幾分鐘內(nèi)安裝好ClickHouse環(huán)境并開始使用。然后,你將學(xué)習(xí)如何使用ClickHouse的更多功能,如基本數(shù)據(jù)類型、函數(shù)、SQL語法、稀疏索引、不同的表引擎、數(shù)據(jù)副本與分片、分布式庫(kù)表管理查詢和集群運(yùn)維監(jiān)控等。
本書整體上是按照由基礎(chǔ)知識(shí)到實(shí)現(xiàn)原理再到項(xiàng)目實(shí)戰(zhàn)的寫作思路,循序漸進(jìn)地鋪展開的。如果你對(duì)ClickHouse已經(jīng)有一定了解,需要進(jìn)行實(shí)際的項(xiàng)目實(shí)踐,可以直接閱讀第7~ 10章。如果你對(duì)ClickHouse還不是很了解,那么建議你按照本書的章節(jié)順序閱讀。
各章的主要內(nèi)容如下。
第1章帶領(lǐng)讀者快速進(jìn)入ClickHouse的世界,讓讀者全面了解ClickHouse的前世今生和核心特性。主要內(nèi)容包括ClickHouse是什么,具有哪些特性,適合哪些應(yīng)用場(chǎng)景等。通過該章,你將掌握ClickHouse 的核心特性,了解列存儲(chǔ)、數(shù)據(jù)壓縮、稀疏索引等存儲(chǔ)層設(shè)計(jì)原理,以及MPP 架構(gòu)、向量化查詢執(zhí)行引擎、動(dòng)態(tài)代碼生成等計(jì)算層的主要設(shè)計(jì)思想與原理。
第2章將走進(jìn) ClickHouse世界,進(jìn)行具體操作實(shí)踐,包括安裝、部署、系統(tǒng)配置、客戶端連接、ClickHouse基礎(chǔ)命令行操作等。
第3章介紹ClickHouse基礎(chǔ)數(shù)據(jù)類型,包括數(shù)值類型、字符串類型和時(shí)間類型等基本內(nèi)容,以及這些基礎(chǔ)數(shù)據(jù)類型的常用函數(shù)操作。
第4章介紹 ClickHouse 高級(jí)數(shù)據(jù)類型,主要包括數(shù)組、元組和嵌套等復(fù)合數(shù)據(jù)類型。另外,還介紹了如何使用聚合函數(shù)類型動(dòng)態(tài)自定義類型,比如說 Bitmap 類型等。
第5章介紹 ClickHouse 函數(shù),主要包括算術(shù)函數(shù)、數(shù)組函數(shù)、字符串函數(shù)、條件函數(shù)、時(shí)間函數(shù)、數(shù)學(xué)函數(shù)、聚合函數(shù)、窗口函數(shù)、空值函數(shù)和常用算子等。
第6章介紹 ClickHouse SQL基礎(chǔ)和查詢配置等相關(guān)內(nèi)容,主要包括使用 SQL 來創(chuàng)建數(shù)據(jù)庫(kù)、表、視圖,新增數(shù)據(jù)庫(kù)用戶賬戶、角色等,并進(jìn)行庫(kù)表權(quán)限管理;同時(shí),介紹了如何向 ClickHouse 表中插入數(shù)據(jù),并對(duì)表中的數(shù)據(jù)進(jìn)行查詢,以及各種SQL查詢子句的用法;后,介紹了如何通過EXPLAIN語句查看SQL執(zhí)行計(jì)劃以及執(zhí)行流程。
第7章介紹如何使用 Spring Boot 來連接 ClickHouse服務(wù)器,一步步實(shí)現(xiàn)前后端的開發(fā)和集成測(cè)試的全過程。
第8章介紹如何使用 ClickHouse的 Bitmap 高級(jí)數(shù)據(jù)類型來實(shí)現(xiàn)超大規(guī)模數(shù)據(jù)場(chǎng)景(千億、萬億級(jí))用戶畫像標(biāo)簽圈人和人群畫像洞察。主要內(nèi)容包括DMP的基本概念、事實(shí)、維度、指標(biāo)與標(biāo)簽的基本知識(shí),如何使用 ClickHouse Bitmap實(shí)現(xiàn)支持任意維度標(biāo)簽組合的人群圈選,以及具體實(shí)現(xiàn)原理和圈選洞察SQL實(shí)例。
第9章以清晰、詳細(xì)的步驟展示如何創(chuàng)建具有多個(gè)節(jié)點(diǎn)的 ClickHouse 集群;同時(shí),介紹如何在 ClickHouse 集群上創(chuàng)建分布式數(shù)據(jù)庫(kù)、分布式表和本地表,以及數(shù)據(jù)的讀寫操作方法和原理;后,重點(diǎn)講解ClickHouse集群分片與副本的工作原理及分布式查詢等內(nèi)容。
第10章介紹如何從0到1使用Docker安裝和配置Grafana、clickhouse-exporter與Prometheus,并搭建一個(gè)ClickHouse集群監(jiān)控平臺(tái);同時(shí),還介紹了如何自定義指標(biāo)面板以及集群常用監(jiān)控指標(biāo)等實(shí)用內(nèi)容。
勘誤
雖然在本書寫作過程中我盡力追求簡(jiǎn)潔正確、清晰流暢地表達(dá)內(nèi)容,但限于自身水平,可能仍有錯(cuò)誤與疏漏之處,還望各位讀者不吝指正。你可以在https://github.com/ClickHouse-InAction/book_issues/issues提Issue,我將在線上為你提供解答。
關(guān)于本書的任何問題、意見或者建議,你都可以通過郵件 universsky@163.com 與我交流。
致謝
在本書的寫作和出版過程中,我得到了很多人的幫助和陪伴。
首先感謝我的妻子和兩個(gè)可愛的孩子。正是有了你們的陪伴,我的工作和生活才更加有意義。我還要感謝我的父母。雖然你們可能不知道我寫的是什么,但是正是有了你們的辛勤養(yǎng)育,我才能長(zhǎng)成今天的我。
我衷心地感謝本書的編輯楊福川老師和李藝?yán)蠋。在本書的寫作過程中,你們耐心細(xì)致地對(duì)稿件進(jìn)行了詳盡、細(xì)致的審閱和批注,提出了很多寶貴的修改建議,也給予了我極大的鼓勵(lì),才讓我終完成了這本書。同時(shí),我還要感謝本書出版過程中所有付出辛勤勞動(dòng)的機(jī)械工業(yè)出版社的工作人員。
在此,我還要特別感謝朱金清、劉兵兵、肖玉哲、張小俠、劉杰、羅光、郭宇、梁瑩瑩、彭家學(xué)等親愛的同事們和朋友們(還有很多,在此就不一一列出了),非常感謝你們能夠抽出寶貴時(shí)間審閱本書,同時(shí)給出了本書內(nèi)容的勘誤,傾情為本書寫了推薦語。能與你們成為同事和朋友,是我莫大的榮幸。
感謝在工作學(xué)習(xí)旅程中認(rèn)識(shí)的所有師長(zhǎng)、前輩、朋友和同事,能夠認(rèn)識(shí)你們并與你們一起學(xué)習(xí)、共事,是我的榮幸。
快樂生活,快樂學(xué)習(xí),快樂分享,快樂實(shí)踐,知行合一。
后,祝大家閱讀愉快!
陳光劍
2023年4月于杭州
目 錄
贊 譽(yù)
前 言
第1章 全面了解ClickHouse 1
1.1 ClickHouse概述 1
1.2 ClickHouse特性 6
1.2.1 深度列存儲(chǔ) 7
1.2.2 向量化查詢執(zhí)行引擎 12
1.2.3 數(shù)據(jù)壓縮 18
1.2.4 使用磁盤 19
1.2.5 支持SQL 19
1.2.6 實(shí)時(shí)數(shù)據(jù)更新 20
1.2.7 稀疏索引 20
1.2.8 運(yùn)行時(shí)代碼生成 21
1.2.9 支持近似計(jì)算 22
1.2.10 數(shù)據(jù)TTL 22
1.2.11 高吞吐寫入能力 22
1.2.12 多核心并行計(jì)算 22
1.2.13 多服務(wù)器分布式計(jì)算 22
1.2.14 分布式 MPP 計(jì)算架構(gòu) 23
1.2.15 分片和副本 26
1.2.16 完整的DBMS能力 26
1.2.17 自適應(yīng)連接算法 28
1.2.18 數(shù)據(jù)復(fù)制和數(shù)據(jù)完整性 28
1.2.19 提供復(fù)合數(shù)據(jù)類型和豐富的
函數(shù)庫(kù) 28
1.3 ClickHouse應(yīng)用場(chǎng)景 28
1.3.1 典型應(yīng)用場(chǎng)景 28
1.3.2 通用解決方案 29
1.4 ClickHouse技術(shù)生態(tài) 29
1.4.1 ClickHouse用戶都有哪些 29
1.4.2 ClickHouse的優(yōu)點(diǎn) 36
1.4.3 ClickHouse的缺點(diǎn) 37
1.4.4 ClickHouse未來展望 37
1.5 本章小結(jié) 37
第2章 ClickHouse 快速入門 38
2.1 安裝與運(yùn)行ClickHouse 38
2.1.1 在macOS系統(tǒng)中安裝
ClickHouse 39
2.1.2 在Linux系統(tǒng)中安裝
ClickHouse 40
2.1.3 在Windows系統(tǒng)中使用
Docker安裝ClickHouse 42
2.2 ClickHouse常用命令行 49
2.2.1 ClickHouse命令行清單 49
2.2.2 實(shí)用命令行工具 49
2.3 本章小結(jié) 55
第3章 ClickHouse基礎(chǔ)數(shù)據(jù)類型 56
3.1 基礎(chǔ)數(shù)據(jù)類型概述 57
3.2 數(shù)值類型 62
3.3 字符串類型 67
3.4 時(shí)間類型 70
3.5 本章小結(jié) 75
第4章 ClickHouse高級(jí)數(shù)據(jù)類型 76
4.1 數(shù)組類型 76
4.1.1 數(shù)組類型定義 76
4.1.2 創(chuàng)建數(shù)組 77
4.1.3 數(shù)組基礎(chǔ)操作 78
4.2 元組類型 86
4.2.1 元組定義 86
4.2.2 創(chuàng)建元組 87
4.2.3 使用元組 87
4.3 嵌套數(shù)據(jù)類型 89
4.3.1 嵌套類型定義 89
4.3.2 創(chuàng)建嵌套類型 90
4.3.3 嵌套類型的使用 90
4.4 Map類型 91
4.4.1 Map類型定義 91
4.4.2 創(chuàng)建Map類型 91
4.4.3 Map常用操作 92
4.5 Nullable類型 95
4.6 聚合函數(shù)類型 96
4.6.1 聚合函數(shù)類型定義 96
4.6.2 使用-State函數(shù)聚合物化
視圖指標(biāo) 97
4.6.3 使用-Merge函數(shù)讀取聚合
結(jié)果值 99
4.7 Bitmap類型 100
4.7.1 Bitmap簡(jiǎn)介 100
4.7.2 創(chuàng)建Bitmap類型 101
4.7.3 Bitmap常用操作函數(shù) 103
4.8 本章小結(jié) 112
第5章 ClickHouse函數(shù) 113
5.1 概述 113
5.1.1 ClickHouse函數(shù)簡(jiǎn)介 113
5.1.2 ClickHouse函數(shù)分類 114
5.1.3 表級(jí)別函數(shù) 116
5.1.4 聚合函數(shù)算子 118
5.2 算術(shù)函數(shù) 118
5.2.1 加法函數(shù) 119
5.2.2 減法函數(shù) 119
5.2.3 乘法函數(shù) 120
5.2.4 浮點(diǎn)除法函數(shù) 120
5.2.5 整數(shù)除法函數(shù) 121
5.2.6 帶0整數(shù)除法函數(shù) 121
5.2.7 取余函數(shù) 121
5.2.8 帶0取余函數(shù) 122
5.2.9 負(fù)數(shù)函數(shù) 122
5.2.10 值函數(shù) 123
5.2.11 公約數(shù)函數(shù) 123
5.2.12 小公倍數(shù)函數(shù) 123
5.2.13 數(shù)函數(shù) 124
5.2.14 小數(shù)函數(shù) 124
5.3 數(shù)組函數(shù) 124
5.3.1 判斷空數(shù)組函數(shù) 124
5.3.2 判斷非空數(shù)組函數(shù) 125
5.3.3 數(shù)組長(zhǎng)度函數(shù) 125
5.3.4 根據(jù)范圍構(gòu)造數(shù)組函數(shù) 126
5.3.5 根據(jù)元素字面量構(gòu)造數(shù)組 126
5.3.6 拼接數(shù)組函數(shù) 126
5.3.7 根據(jù)下標(biāo)獲取元素函數(shù) 127
5.3.8 判斷是否包含元素函數(shù) 127
5.3.9 判斷是不是子數(shù)組函數(shù) 128
5.3.10 判斷兩個(gè)數(shù)組是否有交集
函數(shù) 128
5.3.11 返回元素下標(biāo)函數(shù) 129
5.3.12 數(shù)組切片函數(shù) 129
5.3.13 數(shù)組升序排序函數(shù) 129
5.3.14 數(shù)組降序排序函數(shù) 130
5.3.15 數(shù)組自定義排序函數(shù) 130
5.3.16 數(shù)組自定義逆序排序
函數(shù) 130
5.3.17 計(jì)算數(shù)組不重復(fù)元素個(gè)數(shù)
函數(shù) 131
5.3.18 數(shù)組元素去重函數(shù) 131
5.3.19 數(shù)組交集函數(shù) 131
5.3.20 數(shù)組歸并函數(shù) 131
5.3.21 數(shù)組逆序函數(shù) 132
5.3.22 數(shù)組拍平函數(shù) 132
5.3.23 數(shù)組壓縮函數(shù) 132
5.3.24 數(shù)組元素映射函數(shù) 133
5.3.25 數(shù)組過濾函數(shù) 133
5.3.26 求數(shù)組小元素函數(shù) 134
5.3.27 求數(shù)組元素函數(shù) 134
5.3.28 數(shù)組元素求和函數(shù) 135
5.3.29 數(shù)組元素平均值函數(shù) 135
5.3.30 數(shù)組元素相乘函數(shù) 136
5.3.31 數(shù)組元素展開函數(shù) 136
5.4 字符串函數(shù) 136
5.4.1 字符串判空函數(shù) 137
5.4.2 字符串非空判斷函數(shù) 137
5.4.3 字符串字節(jié)長(zhǎng)度函數(shù) 137
5.4.4 左補(bǔ)齊字符串函數(shù) 138
5.4.5 右補(bǔ)齊字符串函數(shù) 138
5.4.6 字符串轉(zhuǎn)小寫函數(shù) 138
5.4.7 字符串轉(zhuǎn)大寫函數(shù) 139
5.4.8 重復(fù)字符串函數(shù) 139
5.4.9 拼接字符串函數(shù) 139