大數據SQL優化 原理與實踐
陳鶴 楊國棟
- 出版商: 機械工業
- 出版日期: 2025-01-01
- 定價: $594
- 售價: 8.5 折 $505
- 語言: 簡體中文
- 頁數: 384
- ISBN: 7111767039
- ISBN-13: 9787111767039
-
相關分類:
SQL、大數據 Big-data
下單後立即進貨 (約4週~6週)
相關主題
商品描述
這是一本站在一線開發人員的視角,從SQL的本質出發,采用理論與實踐相結合、案例與分析相結合、作者經驗與一線需求相結合的方式,深度解讀大數據SQL優化核心技術和解決方案的工具書。本書主要面向大數據初中級技術人員,期望幫大家深度理解大數據SQL優化原理,掌握SQL優化的落地實踐方法,從而真正“玩轉”大數據SQL優化技術,根據實際問題和需求設計出有針對性的提升SQL性能的解決方案。 本書共分為4篇,包括10章。 認知篇(第1章)主要面向初學者闡述為什麽大數據計算或存儲引擎發展至今最終選擇SQL作為統一查詢語言的原因及利弊,大數據SQL從業者目前面臨的主要問題,以及調優的兩個根本目標。 原理篇(第2章)以深入淺出的方式解讀SQL的本質。為了降低讀者理解的門檻,本篇還以Hive、Spark和Flink這三個主流的引擎為例,從源碼的角度探索SQL執行背後的秘密。 實踐篇(第3~9章)首先深入解讀引擎查詢優化器的兩大優化策略——基於規則的優化和基於代價的優化的實現原理、示例和局限性,然後以Hive、Spark、Flink等主流引擎為藍本,探索SQL優化(包括結構與參數調優、子查詢優化、連接優化、聚合優化)的解決思路和方法論,並給出作者多年總結的一些“坑”。 案例篇(第10章)以實踐篇的各種真實需求調優歷程為基礎,以點帶面,以小明大,分享電商、金融、銀行這三個典型行業的典型公司大數據SQL調優案例,還給出了內容平台數倉、查詢高可用、實時性數倉等業務場景的解決方案。
作者簡介
陳鶴,大數據專家和架構師,現任東南亞某電商公司大數據專家,曾就職於VIVO等大廠。長期從事大數據架構、實時數據倉庫、流批一體與數據應用平台架構研發工作。在Hadoop、Spark、Flink等方面積累了豐富的經驗。曾先後主導或參與了多個電商、金融領域的數據體系建設、疑難項目改造、數據平台架構設計與實現項目。數據之力技術叢書編委會委員,PowerData社區核心成員,擁有豐富的大數據相關寫作和授課經驗。
目錄大綱
前言
認知篇
第1章 概述
1.1 大數據的發展歷程
1.2 大數據為什麽選用SQL
1.2.1 標準化語言
1.2.2 聲明式編程
1.2.3 借鑒關系數據庫成熟理論
1.3 大數據SQL的弊端
1.3.1 易學難精
1.3.2 表達能力有限
1.3.3 與關系型數據庫求同存異
1.4 為什麽要調優
1.4.1 降本提效
1.4.2 知其然並知其所以然
原理篇
第2章 SQL的本質
2.1 執行過程提煉
2.2 抽象語法樹
2.3 SQL抽象語法樹
2.4 Hive執行原理
2.4.1 詞法解析
2.4.2 語義分析
2.4.3 邏輯優化
2.4.4 物理優化
2.5 Spark執行原理
2.5.1 詞法解析
2.5.2 語義分析
2.5.3 邏輯優化
2.5.4 物理優化
2.6 Flink執行原理
2.6.1 詞法解析
2.6.2 語義分析
2.6.3 邏輯優化
2.6.4 物理優化
實踐篇
第3章 任勞任怨的引擎
3.1 基於規則優化概述
3.1.1 謂詞下推
3.1.2 常量堆疊
3.1.3 常量傳遞
3.1.4 等式傳遞
3.1.5 布爾表達式簡化
3.1.6 BETWEEN-AND重寫
3.1.7 NOT取反重寫
3.1.8 簡化IF/CASE WHEN條件表達式
3.1.9 優化LIKE正則表達式
3.1.10 簡化CAST表達式
3.1.11 簡化UPPER/LOWER表達式
3.1.12 優化二元表達式
3.1.13 簡化覆雜類型數據結構的操作符
3.1.14 合並投影
3.1.15 列裁剪
3.1.16 優化冗余別名
3.1.17 替換NULL表達式
3.1.18 CONCAT合並
3.1.19 等式變換
3.1.20 不等式變換
3.2 基於代價優化的簡析
3.3 兩種優化的局限性
第4章 調優解決方案
4.1 理解業務,選擇需求
4.2 利用執行計劃
4.3 利用統計信息
4.4 利用日志
4.5 利用分析工具
4.5.1 Dr.Elephant
4.5.2 火焰圖
4.5.3 Prometheus
4.6 等價重寫思想
4.6.1 關系代數
4.6.2 等價變換規則
第5章 結構與參數調優
5.1 參數調優
5.1.1 並行執行
5.1.2 預聚合
5.1.3 擴大並行度
5.1.4 內存分配
5.1.5 數據重用
5.1.6 Kafka限流
5.2 利用Hint
5.3 合理的表設計
5.3.1 小文件合並
5.3.2 分區表
5.3.3 分桶表
5.3.4 物化視圖
5.4 存儲調整
5.4.1 存儲格式
5.4.2 壓縮類型
第6章 子查詢優化案例解析
6.1 案例分享
6.1.1 子查詢改寫為JOIN
6.1.2 避免全表掃描
6.1.3 避免無效過濾條件
6.1.4 子查詢改寫為窗口函數
6.1.5 覆雜UDF緩存
6.1.6 子查詢改寫為半連接
6.2 深度剖析
6.2.1 讓人又愛又恨的子查詢
6.2.2 子查詢消除算法
6.2.3 子查詢合並算法
第7章 連接優化案例解析
7.1 案例分享
7.1.1 改寫為UNION
7.1.2 強制廣播
7.1.3 使用Bucket Join
7.1.4 數據打散
7.1.5 謹慎對待關聯鍵的數據類型
7.1.6 傾斜數據分離
7.1.7 慎用外連接
7.1.8 流Join的實現
7.1.9 手動過濾下推
7.1.10 先聚合,再關聯
7.1.11 一對一再膨脹策略
7.2 深度剖析
7.2.1 連接實現
7.2.2 外連接消除算法
7.2.3 連接排序算法
第8章 聚合優化案例解析
8.1 分而治之
8.2 兩階段聚合
8.3 多維聚合轉UNION
8.4 異常值過濾
8.5 去重轉為求和/計數
8.6 使用其他結構去重
8.7 善用標簽
8.8 避免使用FINAL
8.9 轉為二進制處理
8.10 行列互置的處理辦法
8.11 炸裂函數中的謂詞下推
8.12 數據膨脹導致的任務異常
8.13 用MAX替換排序
第9章 SQL優化的“最後一公里”
9.1 謹慎操作NULL值
9.2 決定性能的關鍵—Shuffle
9.3 數據傾斜的危害
9.4 切莫盲目升級版本
9.5 引擎自優化的利弊
案例篇
第10章 實戰案例分享
10.1 某電商業務營銷活動實時指標優化方案
10.2 某金融業務風控行為實時指標優化方案
10.3 某銀行監管項目實時指標優化方案
10.4 某內容平台數倉建設歷程
10.4.1 建模指導思想
10.4.2 數倉架構設計
10.4.3 數倉建設理論
10.4.4 通用設計方法
10.4.5 數倉規範
10.4.6 各層級具體實施過程
10.5 訂單冷備數據查詢高可用方案
10.6 淺談實時數倉建設
10.6.1 各類架構的利弊
10.6.2 分層有沒有意義
10.6.3 確