-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
OLAP引擎底層原理與設計實踐 版權信息
- ISBN:9787111769842
- 條形碼:9787111769842 ; 978-7-111-76984-2
- 裝幀:平裝-膠訂
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
OLAP引擎底層原理與設計實踐 本書特色
Presto創始人,及來自字節跳動、B站的多位專家鼎力推薦。融合了兩位作者在騰訊和字節做數據庫開發、數據架構的經驗。這本書不僅可以作為深入理解OLAP引擎核心原理和設計OLAP引擎的參考書,還可以作為使用Presto(Trino)的指導手冊。
OLAP引擎底層原理與設計實踐 內容簡介
這是一本從OLAP核心概念出發,以Presto為例,從整體執行流程到不同SQL的執行原理,完整呈現OLAP查詢的核心流程和OLAP引擎設計思路,并指導讀者形成OLAP引擎設計解決方案的專業技術工具書。本書不僅面向初級讀者介紹了OLAP查詢的基本原理和Presto使用方法,還從源碼級剖析了OLAP引擎核心原理,包括SQL查詢解析器、優化器、調度器、執行器等核心組件,并將內容擴展到OLAP引擎的常見高性能優化方案上。全書由淺入深,圖文并茂,把晦澀難懂的內容講解得透徹易懂。 本書分為6篇,包括14章。 **篇(第1章和第2章)總體介紹業界常見的OLAP引擎并分析其優劣,討論OLAP引擎的技術發展趨勢及選型方法,介紹Presto背景知識及其使用方法、技巧。 第二篇(第3章和第4章)串講OLAP查詢執行的整個過程,并概要性介紹查詢解析器、優化器、調度器、執行器等核心模塊的工作原理,目的是讓讀者形成整體認知。 第三篇(第5~8章)以例講理,對多種經典SQL的執行原理進行解析,復雜度從前到后逐章遞增,包含了投影變換、過濾、行數限定、排序以及多種聚合場景。 第四篇(第9章和第10章)詳解分布式查詢執行的數據交換機制,涵蓋了查詢規劃、調度、執行的多個階段等重點內容。 第五篇(第11章和第12章)以Presto為例整體介紹流行的OLAP引擎擴展機制——插件體系與連接器。 第六篇(第13章和第14章)主要介紹函數的設計原理與開發實戰,這部分首先介紹函數注冊、解析識別、調用等重要流程,*后從標量函數、聚合函數兩方面入手,用多個實際案例介紹高級API(注解框架)的開發方法以及低級API的底層開發方法。
OLAP引擎底層原理與設計實踐OLAP引擎底層原理與設計實踐 前言
前 言 Preface
為什么要寫這本書
在大數據時代,OLAP引擎作為處理海量數據的關鍵技術,其復雜性和技術深度要求我們不斷學習和探索。然而,市面上關于OLAP引擎的資料大多數都是分散且難以系統化理解的。本書試圖通過梳理OLAP引擎的設計哲學、架構原理、查詢執行機制以及優化策略,為讀者提供一個清晰的學習路徑。
20世紀90年代末,OLAP起源于傳統數據庫,一直未有起色,2006年后經過近5年的發展,產生了一門新的技術——OLAP大數據分析引擎(簡稱OLAP引擎)。OLAP結合大數據得以蓬勃發展,在大型互聯網公司占據了極其重要的地位,諸如Presto、Impala、Druid、Elasticsearch、Kylin、阿里云AnalyticDB等產品層出不窮,這也是它們*輝煌的時代。由Facebook開源的Presto是其中的佼佼者,它是以MPP為架構的OLAP引擎中的中流砥柱。如果你學習過Spark、Flink的源碼,會驚喜地發現,其中的多個設計思路和實現都參考了Presto,甚至于2019年在北京召開的Flink Forward大會上介紹Flink OLAP發展方向時,對比的對象都是Presto。無論是在Facebook、Amazon、Uber、Twitter,還是在騰訊、阿里、京東、美團、滴滴,都可以見到Presto,由此可見Presto在大數據領域的影響力。
OLAP引擎底層原理與設計實踐 目錄
Contents 目 錄
序一
序二
序三
序四(原版)
序四(中文版)
前言
致謝一
致謝二
**篇 背景知識
第1章 OLAP引擎介紹與對比2
1.1 OLAP的定義與對比標準2
1.1.1 OLAP的定義2
1.1.2 OLAP引擎之間的對比標準3
1.2 各種OLAP引擎的主要特點6
1.2.1 Hive6
1.2.2 SparkSQL、FlinkSQL6
1.2.3 ClickHouse6
1.2.4 Elasticsearch8
1.2.5 Presto9
1.2.6 Impala10
1.2.7 Doris10
1.2.8 Druid11
1.2.9 總結12
1.3 再談對Presto技術發展的理解13
1.4 總結、思考、實踐15
第2章 Presto基本介紹16
2.1 Presto概述:特性、原理、架構16
2.1.1 一個高性能、分布式的SQL
執行框架17
2.1.2 一套插件化體系18
2.1.3 開箱即用的SQL內置函數和
連接器20
2.2 Presto的應用場景與企業案例20
2.2.1 Presto的應用場景20
2.2.2 Presto的企業案例21
2.2.3 Presto不適合哪些場景23
2.3 Presto常見問題及應對策略25
2.3.1 查詢協調節點單點問題25
2.3.2 查詢執行過程沒有容錯機制27
2.3.3 查詢執行時報錯exceeding
memory limits27
2.3.4 無法動態增刪改或加載數據
目錄與UDF28
2.3.5 查詢執行結果必須經集群協調節
點返回28
2.3.6 不支持低延遲、高并發28
2.4 Presto與Trino的項目與版本
選擇30
2.4.1 Trino與Presto選擇哪個30
2.4.2 本書為什么用Trino的v350
版本來做介紹31
2.4.3 Presto項目源碼結構32
2.5 編譯與運行Presto源碼34
2.5.1 環境準備34
2.5.2 下載源碼并載入IDEA35
2.5.3 編譯Presto源碼36
2.5.4 標記Antlr4自動生成的代碼
為generated source36
2.5.5 在IDEA中運行3個節點的
Presto集群38
2.5.6 運行Presto命令行工具44
2.5.7 調試Presto源碼常見問題44
2.6 基于Presto的數據倉庫及本書
常用SQL46
2.6.1 數據倉庫介紹46
2.6.2 TPC-DS Data Model數據
模型介紹47
2.6.3 本書常用SQL49
2.6.4 在哪里執行本節介紹的SQL54
2.7 總結、思考、實踐54
第二篇 核心原理
第3章 分布式查詢執行的整體流程56
3.1 分布式OLAP引擎整體架構及
查詢執行原理56
3.2 分布式查詢執行的整體介紹58
3.2.1 從分布式架構看SQL查詢
的執行流程58
3.2.2 從功能模塊看SQL執行流程58
3.2.3 原理講解涉及的案例介紹59
3.3 查詢的接收、解析與提交60
3.3.1 接收SQL查詢請求60
3.3.2 詞法與語法分析并生成抽象
語法樹62
3.3.3 創建并提交QueryExecution63
3.4 執行計劃的生成與優化64
3.4.1 語義分析,生成執行計劃64
3.4.2 優化執行計劃,生成優化后
的執行計劃65
3.4.3 將邏輯執行計劃樹拆分為
多棵子樹68
3.5 執行計劃的調度69
3.5.1 創建SqlStageExecution69
3.5.2 調度并分發HttpRemoteTask72
3.6 執行計劃的執行78
3.6.1 在多個查詢執行節點上執行
任務78
3.6.2 分批返回查詢計算結果給
SQL客戶端85
3.7 總結、思考、實踐87
第4章 查詢引擎核心模塊拆解88
4.1 執行計劃生成的設計實現88
4.1.1 從SQL到抽象語法樹88
4.1.2 語義分析95
4.1.3 生成初始邏輯執行計劃101
4.2 執行計劃優化的目的、基本
原理和基礎算法106
4.2.1 執行計劃優化的目的106
4.2.2 執行計劃優化的基本原理106
4.2.3 執行計劃優化的基礎算法110
4.3 執行計劃優化的設計實現115
4.3.1 執行計劃優化的工作流程115
4.3.2 非迭代式優化器和迭代式
優化器118
4.4 總結、思考、實踐125
第三篇 經典SQL
第5章 數據過濾與投影相關查詢
的執行原理解析128
5.1 SQL-01簡單拉取數據查詢的
實現原理128
5.1.1 執行計劃的生成與優化128
5.1.2 分布式調度與執行的設計實現130
5.2 SQL-02數據過濾與投影查詢的
實現原理134
5.2.1 執行計劃的生成與優化134
5.2.2 分布式調度與執行的設計實現136
5.3 數據過濾與投影相關查詢涉及
的查詢優化147
5.3.1 列裁剪147
5.3.2 部分計算下推到存儲服務148
5.3.3 表達式計算的優化150
5.4 總結、思考、實踐151
第6章 行數限定與排序相關
查詢的執行原理解析153
6.1 SQL-10行數限定查詢的實現
原理153
6.1.1 執行計劃的生成與優化154
6.1.2 分布式調度與執行的設計
實現155
6.2 SQL-11 排序查詢的實現原理158
6.2.1 執行計劃的生成與優化158
6.2.2 分布式調度與執行的設計實現160
6.3 SQL-12 排序與行數限定組合
查詢的實現原理174
6.3.1 執行計劃的生成與優化174
6.3.2 分布式調度與執行的設計實現176
6.4 簡單SELECT查詢相關的查詢
優化191
6.4.1 將LIMIT計算下推到數據
源連接器191
6.4.2 去除不需要的LIMIT計算192
6.5 總結、思考、實踐193
第7章 簡單聚合查詢的執行原理
解析194
7.1 聚合查詢原理通識性介紹194
7.1.1 常見的聚合查詢194
7.1.2 聚合查詢是有狀態計算196
7.1.3 實現分布式聚合的幾種執行
模型196
7.1.4 Presto對聚合查詢的設計與
抽象197
7.2 SQL-20不分組聚合查詢的實現
原理198
7.2.1 執行計劃的生成與優化198
7.2.2 分布式調度與執行的設計實現201
7.2.3 使用Scatter-Gather執行模型
實現SQL-20211
7.3 SQL-21分組聚合查詢的實現原理212
7.3.1 執行計劃的生成與優化213
7.3.2 分布式調度與執行的設計實現214
7.3.3 使用Scatter-Gather執行模型
實現SQL-21236
7.3.4 總結237
7.4 聚合函數的設計與實現238
7.5 總結、思考、實踐240
第8章 復雜聚合查詢的執行原理
解析242
8.1 SQL-22去重計數查詢的實現
原理242
8.1.1 執行計劃的生成與優化243
8.1.2 分布式調度與執行的設計實現246
8.1.3 使用Scatter-Gather執行模型
實現SQL-22247
8.1.4 總結248
8.2 SQL-23多個聚合計算查詢的
實現原理248
8.2.1 執行計劃的生成與優化249
8.2.2 分布式調度與執行的設計實現252
8.2.3 為什么Presto要引入MarkDistinct
優化258
8.2.4 使用Scatter-Gather執行模型
實現SQL-23260
8.3 SQL-30綜合多種計算查詢的
實現原理260
8.3.1 執行計劃的生成與優化261
8.3.2 分布式調度與執行的設計實現264
8.3.3 使用Scatter-Gather執行模型
實現SQL-30265
8.3.4 總結266
8.4 常見聚合查詢優化手段與優化器267
8.4.1 將聚合操作拆分為部分聚合與
*終聚合267
8.4.2 在上下游任務中傳播哈希聚合
分組列的哈希值267
8.4.3 部分聚合計算下推268
8.4.4 將ORDER BY與LIMI T計算
優化為TopN計算268
8.4.5 基于代價評估的方式來決定
如何選擇執行模型268
8.4.6 利用存儲的數據分布特性做
優化269
8.5 總結、思考、實踐270
第四篇 數據交換機制
第9章 數據交換在查詢規劃、
調度、執行中的基本原理272
9.1 數據交換機制簡介272
9.1.1 數據交換是什么272
9.1.2 何時需要做數據交換273
9.1.3 數據交換是拉取模型274
9.1.4 任務之間數據交換與任務內部
數據交換275
9.1.5 數據交換的代價276
9.2 查詢優化階段任務之間數據交換
的設計實現276
9.2.1 任務之間數據交換的3個
階段276
9.2.2 ExchangeNode的實現277
9.2.3 利用AddExchanges優化器
插入ExchangeNode282
9.2.4 AddExchanges決策在哪里
插入ExchangeNode的主要
考慮因素284
9.2.5 AddExchanges優化器的設計思路
與案例285
9.2.6 拆分PlanFragment296
9.3 查詢調度與執行階段的整體設計
思路297
9.3.1 在分布式查詢集群中唯一確定
某個任務297
9.3.2 每個任務的上游和下游298
9.3.3 交付上游任務產出的數據298
9.3.4 上下游任務數據交換的交互
機制300
9.3.5 上下游任務生產與消費的速度301
9.4 總結、思考、實踐301
第10章 數據交換在查詢調度與
執行中的詳細設計302
10.1 查詢調度階段任務之間數據
交換的設計實現302
10.1.1 調度部分整體介紹302
10.1.2 建立相鄰上下游查詢執行
階段間的數據依賴關系303
10.1.3 RemoteTask中與任務之間
數據交換相關的抽象設計308
10.2 查詢執行階段任務之間數據交換
上游的設計實現309
10.2.1 整體概述309
10.2.2 OutputBuffer的工作流程309
10.2.3 不同的OutputBuffer具體實現313
10.2.4 兩種OutputOperator315
10.3 查詢執行階段任務之間數據交換
下游的設計實現315
10.3.1 整體概述315
10.3.2 兩種用于拉取上游任務數據
的SourceOperator316
10.4 上下游任務之間數據交換的RPC
交互機制321
10.4.1 數據交換的RPC通信協議321
10.4.2 SerializedPage的序列化
格式323
10.5 任務內部數據交換的基本原理324
10.6 利用數據交換能力實現的特殊
功能326
10.6.1 利用數據交換能力在查詢執行
路徑實現的反壓機制326
10.6.2 利用數據交換能力實現部分
SQL的LIMIT語義328
10.6.3 任務之間數據交換交互中的
亂序請求328
10.6.4 分批計算與返回執行結果329
10.7 總結、思考、實踐330
第五篇 插件體系與連接器
第11章 連接器插件體系詳解334
11.1 插件體系整體介紹334
11.1.1 插件概述335
11.1.2 插件分類335
11.1.3 SPI機制337
11.2 插件加載機制341
11.2.1 插件初始化流程入口341
11.2.2 插件加載343
11.2.3 插件整合346
11.2.4 類加載原理347
11.3 連接器實現原理351
11.3.1 連接器概述351
11.3.2 連接器插件實例化353
11.3.3 元數據模塊359
11.3.4 數據讀取366
11.3.5 部分計算下推371
11.3.6 連接器在查詢執行中的作用374
11.4 關于連接器的一些深入思考375
11.4.1 使用連接器的注意事項376
11.4.2 站在OLAP引擎設計者視角來
理解連接器的設計范式376
11.5 總結、思考、實踐377
第12章 連接器開發實踐:以Example-
HTTP連接器為例378
12.1 Example-HTTP連接器基本介紹379
12.2 基礎代碼380
12.2.1 ExamplePlugin380
12.2.2 ExampleConfig380
12.2.3 ExampleModule381
12.2.4 ExampleConnector382
12.2.5 ExampleConnectorFactory383
12.3 元數據模塊385
12.3.1 ExampleClient386
12.3.2 ExampleTable387
12.4 自定義句柄387
12.5 劃分分片388
12.6 讀取分片389
12.7 實現與連接器交互的HTTP
數據源392
12.7.1 定義元數據接口393
12.7.2 定義數據接口394
12.7.3 Example-HTTP數據源的代碼
實現示例395
12.7.4 在Presto跑通Example-HTTP
數據源的查詢396
12.8 總結、思考、實踐398
第六篇 函數原理與開發
第13章 函數的執行原理402
13.1 函數體系總覽402
13.1.1 函數分類403
13.1.2 函數的生命周期403
13.1.3 函數開發的幾種途徑404
13.1.4 MethodHandle407
13.1.5 入門函數體系知識的學習思路408
13.2 函數的基本構成409
13.2.1 函數管理409
13.2.2 函數元數據410
13.2.3 函數簽名411
13.2.4 泛型變量412
13.2.5 字面量變量414
13.2.6 自動注入的參數415
13.3 函數相關的主要流程415
13.3.1 引擎啟動時的函數注冊415
13.3.2 查詢執行時的函數解析416
13.3.3 查詢執行時的函數調用418
13.4 總結、思考、實踐419
第14章 自定義函數開發實踐421
14.1 標量函數開發方法421
14.1.1 注解框架422
14.1.2 底層開發428
14.2 聚合函數開發實踐433
14.2.1 實現聚合函數的核心原理433
14.2.2 注解框架435
14.2.3 底層開發436
14.3 總結、思考、實踐444
OLAP引擎底層原理與設計實踐 作者簡介
高英舉
現于某互聯網大廠從事時序數據引擎研發工作,有超過12年工作經驗,涉及數據平臺、數據倉庫、OLAP引擎內核等多個領域。熟悉Hadoop、Presto、Elasticsearch、Spark、Flink等大數據技術,在多個互聯網大廠的生產環境中有大數據產品大規模使用與深入優化經驗。數據集成流批處理工具Apache SeaTunnel(https://github.com/apache/seatunnel)項目創始人、PMC、主要代碼貢獻者。
許一騰
現任某互聯網大廠數據工程師,主攻數據隱私合規建設。超過7年工作經驗,曾在騰訊看點、醫療擔任數據研發負責人,期間負責多種大數據平臺與能力建設,包括數據質量、聯邦查詢、數倉建模、DataOps、詳細數據血緣、基于意圖的權限控制等方向。平時喜歡研究源碼,從0到1學習了Redis、Presto(Trino)、Spark等多種開源項目,并且熱愛分享。
- >
有舍有得是人生
- >
回憶愛瑪儂
- >
羅庸西南聯大授課錄
- >
龍榆生:詞曲概論/大家小書
- >
姑媽的寶刀
- >
上帝之肋:男人的真實旅程
- >
朝聞道
- >
人文閱讀與收藏·良友文學叢書:一天的工作