隨著各行各業(yè)對(duì)大數(shù)據(jù)實(shí)時(shí)查詢的需求持續(xù)增長(zhǎng),數(shù)據(jù)查詢及分析引擎正變得不可或缺。Presto是由Facebook開源的高性能分布式SQL查詢引擎,其用戶包括Netflix、Airbnb、LinkedIn、Twitter、Uber等知名公司。本書由Presto的核心開發(fā)人員參與撰寫,教你系統(tǒng)地學(xué)習(xí)Presto的用法。書中內(nèi)容涵蓋Presto的安裝、設(shè)計(jì)理念、查詢操作、最佳實(shí)踐、與主要云平臺(tái)的結(jié)合等。本書分為三大部分:第一部分介紹Presto的基礎(chǔ)知識(shí);第二部分更進(jìn)一步,介紹Presto架構(gòu)、集群部署、與數(shù)據(jù)源的連接等;第三部分講解安全配置以及Presto的實(shí)際用例。你可以通過本書學(xué)會(huì)針對(duì)不同的數(shù)據(jù)源快速執(zhí)行交互式SQL數(shù)據(jù)分析,并利用Presto管理和使用海量數(shù)據(jù)。
1.Presto是由Facebook開源的高性能分布式SQL查詢引擎,其用戶包括Netflix、Airbnb、LinkedIn、Twitter、Uber等知名公司。
2.作為高性能分布式SQL查詢引擎,Presto能夠針對(duì)不同的數(shù)據(jù)源高效、快速地執(zhí)行交互式分析。大數(shù)據(jù)的興起使得數(shù)據(jù)存儲(chǔ)機(jī)制多樣化。面對(duì)標(biāo)準(zhǔn)不一的存儲(chǔ)系統(tǒng),你可以利用Presto輕松打破壁壘,連通數(shù)據(jù)孤島。
3.本書由Presto項(xiàng)目創(chuàng)始成員參與執(zhí)筆。你將學(xué)會(huì)用簡(jiǎn)單的Presto語句快速查詢多個(gè)數(shù)據(jù)源,把握SQL-on-Anything的精髓。在任何規(guī)模、任何存儲(chǔ)系統(tǒng)、任何環(huán)境中,你都能發(fā)揮SQL的威力。
- 入門:探索Presto的用例,學(xué)習(xí)安裝、配置和使用Presto。
- 進(jìn)階:深入理解Presto的架構(gòu),學(xué)習(xí)連接器實(shí)例和SQL高級(jí)特性。
- 實(shí)踐:了解如何在生產(chǎn)環(huán)境中使用Presto,保證安全性,與其他工具集成。
馬特·富勒(Matt Fuller)
Starburst公司聯(lián)合創(chuàng)始人。
曼弗雷德·莫澤(Manfred Moser)
開源社區(qū)擁護(hù)者、技術(shù)作家、培訓(xùn)師,Starburst公司軟件工程師。
馬丁·特拉韋爾索(Martin Traverso)
Presto項(xiàng)目創(chuàng)始成員,Presto軟件基金會(huì)聯(lián)合創(chuàng)始人,Starburst公司首席技術(shù)官。
【譯者簡(jiǎn)介】
張晨
畢業(yè)于上海交通大學(xué),熱愛大數(shù)據(jù)技術(shù)、數(shù)據(jù)庫(kù)、分布式系統(tǒng)和函數(shù)式編程,現(xiàn)于Indeed東京擔(dān)任軟件工程師。
黃鵬程
畢業(yè)于北京郵電大學(xué),專注于數(shù)據(jù)庫(kù)和大數(shù)據(jù)平臺(tái)的開發(fā)與架構(gòu)工作。曾就職于中國(guó)民生銀行,擔(dān)任大數(shù)據(jù)基礎(chǔ)架構(gòu)團(tuán)隊(duì)負(fù)責(zé)人。現(xiàn)任阿里云高級(jí)產(chǎn)品專家,負(fù)責(zé)阿里云數(shù)據(jù)庫(kù)相關(guān)產(chǎn)品的設(shè)計(jì)與規(guī)劃工作。
傅宇
畢業(yè)于南京大學(xué),專注于數(shù)據(jù)庫(kù)技術(shù),現(xiàn)任阿里云技術(shù)專家,擔(dān)任PolarDB-X云原生分布式數(shù)據(jù)庫(kù)內(nèi)核研發(fā)工作,熟悉分布式事務(wù)、查詢優(yōu)化器和執(zhí)行器,對(duì)大數(shù)據(jù)領(lǐng)域充滿熱情。
譯者序 xv
序 xvii
前言 xix
第 一部分 Presto 入門
第 1章 Presto 介紹 3
1.1 大數(shù)據(jù)帶來的問題 3
1.2 Presto來救場(chǎng) 4
1.2.1 為性能和規(guī)模而生 5
1.2.2 SQL-on-Anything 5
1.2.3 存儲(chǔ)與計(jì)算分離 6
1.3 Presto使用場(chǎng)景 6
1.3.1 單一的SQL分析訪問點(diǎn) 7
1.3.2 數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)源系統(tǒng)的訪問點(diǎn) 7
1.3.3 提供對(duì)任何內(nèi)容的SQL訪問 8
1.3.4 聯(lián)邦查詢 9
1.3.5 虛擬數(shù)據(jù)倉(cāng)庫(kù)的語義層 9
1.3.6 數(shù)據(jù)湖查詢引擎 9
1.3.7 SQL轉(zhuǎn)換和ETL10
1.3.8 更快的響應(yīng)帶來更好的數(shù)據(jù)見解 10
1.3.9 大數(shù)據(jù)、機(jī)器學(xué)習(xí)和人工智能 10
1.3.10 其他使用場(chǎng)景 11
1.4 Presto 資源 11
1.4.1 官方網(wǎng)站 11
1.4.2 文檔 12
1.4.3 社區(qū)交流 12
1.4.4 源代碼、許可證和版本 12
1.4.5 貢獻(xiàn) 12
1.4.6 本書資源 13
1.4.7 鳶尾花數(shù)據(jù)集 13
1.4.8 航班數(shù)據(jù)集 14
1.5 Presto簡(jiǎn)史 14
1.6 小結(jié) 15
第 2章 安裝和配置Presto 16
2.1 使用Docker容器嘗試Presto 16
2.2 使用歸檔文件安裝 17
2.2.1 JVM 17
2.2.2 Python 18
2.2.3 安裝 18
2.2.4 配置 19
2.3 添加數(shù)據(jù)源 20
2.4 運(yùn)行Presto 21
2.5 小結(jié) 21
第3章 使用Presto 22
3.1 Presto CLI 22
3.1.1 使用入門 22
3.1.2 分頁 25
3.1.3 命令歷史 25
3.1.4 額外診斷 25
3.1.5 執(zhí)行查詢 25
3.1.6 輸出格式 26
3.1.7 忽略錯(cuò)誤 26
3.2 Presto JDBC驅(qū)動(dòng) 27
3.2.1 下載和注冊(cè)驅(qū)動(dòng) 28
3.2.2 創(chuàng)建到Presto的連接 29
3.3 Presto與ODBC 31
3.4 客戶端庫(kù) 31
3.5 Presto Web UI 31
3.6 使用Presto執(zhí)行SQL 32
3.6.1 概念 33
3.6.2 入門案例 33
3.7 小結(jié) 36
第二部分 深入理解Presto
第4章 Presto的架構(gòu) 39
4.1 集群中的協(xié)調(diào)器和工作節(jié)點(diǎn) 39
4.2 協(xié)調(diào)器 41
4.3 節(jié)點(diǎn)發(fā)現(xiàn)服務(wù) 41
4.4 工作節(jié)點(diǎn) 42
4.5 基于連接器的架構(gòu) 42
4.6 catalog、schema和表 43
4.7 查詢執(zhí)行模型 44
4.8 查詢優(yōu)化 47
4.8.1 解析和分析 48
4.8.2 初始查詢計(jì)劃 49
4.9 優(yōu)化規(guī)則 50
4.9.1 謂詞下推 51
4.9.2 Cross Join 消除 51
4.9.3 TopN 52
4.9.4 局部聚合 52
4.10 實(shí)現(xiàn)規(guī)則 53
4.10.1 Lateral Join 去關(guān)聯(lián)化 53
4.10.2 Semi-join(IN)去關(guān)聯(lián)化 54
4.11 基于代價(jià)的優(yōu)化器 55
4.11.1 代價(jià)的概念 55
4.11.2 Join的代價(jià) 57
4.11.3 表統(tǒng)計(jì)信息 57
4.11.4 過濾統(tǒng)計(jì)信息 58
4.11.5 分區(qū)表的統(tǒng)計(jì)信息 59
4.11.6 Join枚舉 60
4.11.7 廣播Join和分布式Join 60
4.12 使用表統(tǒng)計(jì)信息 62
4.12.1 Presto的ANALYZE 命令 62
4.12.2 在寫入存儲(chǔ)時(shí)收集數(shù)據(jù) 63
4.12.3 Hive的ANALYZE 命令 63
4.12.4 顯示表統(tǒng)計(jì)信息 63
4.13 小結(jié) 64
第5章 生產(chǎn)環(huán)境部署 65
5.1 配置細(xì)節(jié) 65
5.2 服務(wù)端配置 65
5.3 日志 66
5.4 節(jié)點(diǎn)配置 67
5.5 JVM配置 68
5.6 啟動(dòng)器 69
5.7 集群安裝 70
5.8 使用RPM安裝 72
5.8.1 安裝目錄結(jié)構(gòu) 72
5.8.2 配置 73
5.8.3 卸載Presto 73
5.9 在云上安裝 73
5.10 集群規(guī)模的考量 74
5.11 小結(jié) 74
第6章 連接器 75
6.1 配置 76
6.2 RDBMS連接器示例:PostgreSQL 76
6.2.1 查詢下推 78
6.2.2 并行性和并發(fā)性 79
6.2.3 其他RDBMS連接器 80
6.2.4 安全性 81
6.3 Presto TPC-H和TPC-DS連接器 81
6.4 用于分布式存儲(chǔ)數(shù)據(jù)源的Hive 連接器 82
6.4.1 Apache Hadoop和Hive 82
6.4.2 Hive連接器 83
6.4.3 Hive式表格式 85
6.4.4 內(nèi)部表與外部表 85
6.4.5 分區(qū)數(shù)據(jù) 87
6.4.6 加載數(shù)據(jù) 88
6.4.7 文件格式和壓縮 90
6.4.8 MinIO示例 91
6.5 非關(guān)系數(shù)據(jù)源 91
6.6 Presto JMX 連接器 92
6.7 黑洞連接器 94
6.8 內(nèi)存連接器 94
6.9 其他連接器 95
6.10 小結(jié) 95
第7章 高級(jí)連接器實(shí)例 96
7.1 用Phoenix連接HBase 96
7.2 鍵值存儲(chǔ)連接器示例:Accumulo 97
7.2.1 使用Presto Accumulo連接器 100
7.2.2 Accumulo中的謂詞下推 102
7.3 Apache Cassandra 連接器 103
7.4 流式系統(tǒng)連接器示例:Kafka 104
7.5 文檔存儲(chǔ)連接器示例:Elasticsearch 106
7.5.1 概述 106
7.5.2 配置和使用方法 106
7.5.3 查詢處理 107
7.5.4 全文搜索 107
7.5.5 總結(jié) 108
7.6 Presto中的聯(lián)邦查詢 108
7.7 ETL和聯(lián)合查詢 114
7.8 小結(jié) 114
第8章 在Presto中使用SQL 115
8.1 Presto語句 116
8.2 Presto系統(tǒng)表 118
8.3 catalog 120
8.4 schema 120
8.5 Information Schema 121
8.6 表 122
8.6.1 表和列屬性 124
8.6.2 復(fù)制現(xiàn)有的表 125
8.6.3 從查詢結(jié)果中新建表 126
8.6.4 修改表 127
8.6.5 刪除表 127
8.6.6 連接器對(duì)表操作的限制 127
8.7 視圖 128
8.8 會(huì)話信息和配置 128
8.9 數(shù)據(jù)類型 129
8.9.1 集合數(shù)據(jù)類型 131
8.9.2 時(shí)態(tài)數(shù)據(jù)類型 132
8.9.3 類型轉(zhuǎn)換 135
8.10 SELECT語句基礎(chǔ) 136
8.11 WHERE子句 137
8.12 GROUP BY和HAVING子句 138
8.13 ORDER BY子句和LIMIT子句 140
8.14 JOIN語句 140
8.15 UNION、INTERSECT和EXCEPT子句 141
8.16 分組操作 143
8.17 WITH子句 144
8.18 子查詢 145
8.18.1 標(biāo)量子查詢 145
8.18.2 EXISTS子查詢 146
8.18.3 集合比較子查詢 146
8.19 從表中刪除數(shù)據(jù) 147
8.20 小結(jié) 147
第9章 高級(jí)SQL特性 148
9.1 函數(shù)和運(yùn)算符介紹 148
9.2 標(biāo)量函數(shù)和運(yùn)算符 149
9.3 布爾運(yùn)算符 150
9.4 邏輯運(yùn)算符 151
9.5 用BETWEEN語句選擇范圍 152
9.6 用IS(NOT) NULL檢測(cè)值的存在 152
9.7 數(shù)學(xué)函數(shù)和運(yùn)算符 152
9.8 三角函數(shù)153
9.9 常數(shù)和隨機(jī)函數(shù) 154
9.10 字符串函數(shù)和運(yùn)算符 154
9.11 字符串和映射 155
9.12 Unicode 156
9.13 正則表達(dá)式 158
9.14 解嵌套復(fù)雜數(shù)據(jù)類型 160
9.15 JSON函數(shù) 161
9.16 日期和時(shí)間函數(shù)及運(yùn)算符 161
9.17 直方圖 164
9.18 聚合函數(shù) 165
9.18.1 映射聚合函數(shù) 165
9.18.2 近似聚合函數(shù) 167
9.19 窗函數(shù) 168
9.20 lambda表達(dá)式 169
9.21 地理空間函數(shù) 170
9.22 Prepared Statement 171
9.23 小結(jié) 173
第三部分 Presto的實(shí)際應(yīng)用
第 10章 安全 177
10.1 認(rèn)證 178
10.2 授權(quán) 181
10.2.1 系統(tǒng)訪問控制 181
10.2.2 連接器訪問控制 184
10.3 加密 186
10.3.1 加密Presto客戶端與協(xié)調(diào)器之間的通信 188
10.3.2 創(chuàng)建Java keystore和Java truststore 190
10.3.3 在Presto集群內(nèi)加密通信 192
10.4 CA與自簽名證書 193
10.5 證書認(rèn)證 194
10.6 Kerberos 197
10.6.1 前提條件 198
10.6.2 Kerberos客戶端認(rèn)證 198
10.6.3 集群內(nèi)部Kerberos 198
10.7 數(shù)據(jù)源訪問和安全配置 199
10.8 使用Hive連接器進(jìn)行Kerberos驗(yàn)證 200
10.8.1 Hive Metastore Thrift服務(wù)認(rèn)證 201
10.8.2 HDFS認(rèn)證 201
10.9 集群分離 202
10.10 小結(jié) 202
第 11章 將Presto與其他工具集成 203
11.1 使用Apache Superset進(jìn)行查詢、可視化和更多操作 203
11.2 使用RubiX提高性能 204
11.3 使用Apache Airflow的工作流 205
11.4 嵌入式Presto示例:Amazon Athena 205
11.5 Starburst企業(yè)版Presto 208
11.6 其他集成案例 208
11.7 自定義集成 209
第 12章 生產(chǎn)環(huán)境中的Presto 211
12.1 使用Presto Web UI監(jiān)控 211
12.1.1 集群級(jí)的細(xì)節(jié) 212
12.1.2 查詢列表 213
12.1.3 查詢細(xì)節(jié)視圖 215
12.2 Presto SQL查詢調(diào)優(yōu) 221
12.3 內(nèi)存管理 223
12.4 任務(wù)并發(fā)性 226
12.5 工作節(jié)點(diǎn)調(diào)度 227
12.5.1 根據(jù)任務(wù)或節(jié)點(diǎn)調(diào)度切片 227
12.5.2 本地調(diào)度策略 227
12.6 網(wǎng)絡(luò)數(shù)據(jù)交換 228
12.6.1 并發(fā)性 228
12.6.2 緩沖區(qū)大小 228
12.7 JVM調(diào)優(yōu) 228
12.8 資源組 230
12.8.1 資源組的定義 231
12.8.2 調(diào)度策略 232
12.8.3 選擇器規(guī)則定義 233
12.9 小結(jié) 233
第 13章 真實(shí)世界的案例 234
13.1 部署和運(yùn)行時(shí)平臺(tái) 234
13.2 集群規(guī)模 235
13.3 Hadoop/Hive遷移的使用場(chǎng)景 237
13.4 其他數(shù)據(jù)源 237
13.5 用戶和流量 237
13.6 小結(jié) 238
第 14章 總結(jié) 239
關(guān)于作者 240
關(guān)于封面 240