-
>
全国计算机等级考试最新真考题库模拟考场及详解·二级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等多种开源项目,并且热爱分享。
- >
莉莉和章鱼
莉莉和章鱼
¥14.4¥42.0 - >
有舍有得是人生
有舍有得是人生
¥18.1¥45.0 - >
月亮与六便士
月亮与六便士
¥19.1¥42.0 - >
新文学天穹两巨星--鲁迅与胡适/红烛学术丛书(红烛学术丛书)
新文学天穹两巨星--鲁迅与胡适/红烛学术丛书(红烛学术丛书)
¥9.9¥23.0 - >
李白与唐代文化
李白与唐代文化
¥9.9¥29.8 - >
烟与镜
烟与镜
¥21.2¥48.0 - >
苦雨斋序跋文-周作人自编集
苦雨斋序跋文-周作人自编集
¥6.8¥16.0 - >
我从未如此眷恋人间
我从未如此眷恋人间
¥16.9¥49.8
-
不良情绪应急处理包--孤独感
¥12.9¥30 -
不良情绪应急处理包--精神内耗
¥12.9¥30 -
孩子、家庭和外部世界
¥17.8¥56 -
北魏政治史(二)
¥26.2¥70 -
北魏政治史(四)
¥24.4¥65 -
北魏政治史(八)
¥20.8¥55