前言 1
第1章 Apache Drill入门 7
什么是Apache Drill 8
Drill用途广泛 8
Drill非常易用 10
有关Drill的性能 11
大数据简史 11
大数据生态中的Drill 13
Drill与类似工具的比较 13
第2章 安装与运行 15
准备系统环境 16
Windows环境下的特殊配置 16
在Windows上安装Drill 18
在Windows上启动Drill 18
在macOS或Linux上安装嵌入模式的Drill 19
在macOS或Linux上以嵌入模式运行Drill 20
在macOS或Linux上安装分布式模式的Drill 21
为Drill准备集群环境 22
启动分布式模式的Drill 23
连接集群 23
小结 24
第3章 Apache Drill概述 25
Apache Hadoop生态 25
Drill是一个低延迟的查询引擎 26
使用HDFS进行分布式数据处理 27
Drill系统结构 27
Drill操作概览 28
Drill是一个查询引擎,不是数据库 29
Drill操作概述 30
Drill组件 30
SQL会话状态 30
编译查询语句 31
查询语句执行 36
低延迟特性 38
小结 41
第4章 查询包含分隔符的数据 42
通过Drill查询数据的几种方式 42
其他操作接口 43
Drill SQL查询格式 44
选择数据源 44
定义工作区 46
指定默认数据源 47
在查询中访问列 49
带表头并包含分隔符的数据 51
Table函数 53
查询目录中的数据 53
理解Drill的数据类型 55
使用字符串处理函数清洗和准备数据 57
复杂数据转换函数 59
操作Drill中的日期和时间 60
把字符串转换为日期 61
对日期进行重新格式化 63
日期计算与操作 63
Drill中的日期时间函数 64
创建视图 65
使用Drill进行数据分析 66
通过聚合函数对数据进行统计 68
查询包含分隔符数据的常见问题 75
列名中的空格 75
列名中的非法字符 76
字段名中的保留字 76
小结 77
第5章 分析复合与嵌套数据 78
数组与Map 78
Drill中的数组 79
在Drill中访问Map(键-值对) 81
查询嵌套数据 83
使用Drill分析日志文件 91
配置Drill读取httpd Web服务器的日志 91
查询Web服务器日志 92
用Drill对其他类型的日志进行分析 97
小结 100
第6章 把Drill连接到数据源 101
查询多种数据源 102
配置新的存储插件 102
用Drill连接关系型数据库 103
通过Drill查询Hadoop数据 108
用Drill连接并查询HBase 108
用Drill查询Hive数据 110
连接Kafka查询流数据 113
提高Kafka查询的性能 115
连接并查询Kudu 115
用Drill连接并查询MongoDB数据 116
把Drill连接到云存储 116
用Drill从OpenTSDB查询时间序列数据 121
小结 122
第7章 连接Dr 123
理解Drill的接口 123
JDBC与Drill 124
ODBC与Drill 125
Drill的REST接口 127
使用Python连接Drill 128
使用drillpy对Drill发起查询 129
使用pydrill连接Drill 130
其他通过Python连接Drill的方法 131
用R语言连接Drill 133
使用sergeant在R中查询Drill 133
通过Java连接Drill 135
在PHP中查询Drill 136
使用连接器 137
在PHP中执行Drill查询 137
在PHP中操作Drill 138
使用Node.js查询Drill 139
在BI工具中使用Drill作为数据源 139
使用Apache Zeppelin和Drill分析数据 139
使用Apache Superset分析数据 145
小结 151
第8章 用Drill完成数据工程工作 152
读时Schema 152
SQL关系模型 153
数据生命周期:数据探索到生产 154
Schema推导 155
数据源推导 155
存储插件 156
存储配置 156
工作区 157
查询目录 159
默认Schema 159
文件类型推导 160
格式插件与格式配置 160
格式推导 161
文件格式变种 162
Schema推导概述 163
分布式扫描 165
带分隔符数据的Schema推导 167
CSV文件处理小结 173
JSON文件的Schema推导 175
二义性数值Schema 178
在文件间保证Schema一致 184
JSON对象 186
Drill中的JSON列表 189
JSON小结 193
在Drill中使用Parquet文件格式 194
Parquet中的Schema进化 195
分区数据目录 195
定义表工作区 198
处理生产环境中的查询 199
捕捉Schema映射视图 199
在脚本中运行复杂查询 200
小结 201
第9章 在生产环境部署Drill 202
安装Drill 202
前置需求 203
生产环境安装 204
配置ZooKeeper 205
内存配置 206
配置日志 208
测试安装是否成功 209
分发Drill可执行文件和配置 210
启动Drill集群 211
配置存储 212
使用ApacheHadoop HDFS 213
使用Amazon S3 214
准入控制 217
其他配置 219
用户自定义函数与自定义插件 219
安全 220
日志级别 220
控制CPU使用 222
监控 223
监控Drill的进程 224
监控JMX指标 224
监控查询 225
其他部署选项 225
MapR安装程序 226
Drill-on-YRAN 226
Docker 226
小结 227
第10章 搭建开发环境 228
安装Maven 228
创建Drill的编译环境 229
设置Git并获取源代码 229
从代码编译Drill 230
安装IDE 231
小结 231
第11章 编写用户自定义函数 232
用例:找出合法的信用卡号码 232
Drill中的用户自定义函数是怎么工作的 234
Drill的简单UDF结构 234
pom.xml文件 235
函数文件 236
简单函数API 240
完整的代码 241
构建与安装UDF 243
静态安装UDF 243
动态安装UDF 243
复合函数:返回Map或数组的UDF 244
例子:解析User Agent元数据 245
ComplexWriter对象 246
编写聚合UDF 248
聚合函数API 249
聚合UDF示例:肯德尔秩相关系数 249
小结 252
第12章 编写格式插件 253
正则表达式格式插件 253
基于Easy框架创建格式插件 255
创建Maven的pom.xml文件 256
创建插件包 258
Drill模块配置 258
格式插件配置 259
注意事项 259
创建正则表达式格式插件配置类 260
版权声明头与代码格式 262
测试配置 262
解决配置问题 263
排查问题 264
创建格式插件类 264
创建测试文件 267
配置RAT 267
高效调试 267
创建单元测试 268
Drill是如何找到插件的 270
记录读取器 270
测试读取器的壳 273
日志 274
出错处理 274
初始化 275
解析正则表达式 276
定义列名 276
投影 277
记录列投影映射 278
空投影 278
全投影 279
部分投影 279
打开文件 281
记录批 282
Drill的列存结构 282
定义向量 283
读取数据 284
把数据放入向量 285
释放资源 286
测试读取器 286
测试通配符场景 286
测试显式投影 288
测试空投影 288
扩展 288
其他细节 290
文件块 290
默认格式配置 290
下一步 292
生产版本 292
给Drill贡献代码:使用Pull Request 292
维护你的分支 293
创建插件项目 293
小结 294
第13章 特殊用法 296
查找在特定区域拍摄的照片 296
分析Excel文件 297
pom.xml文件 298
Excel自定义记录读取器 299
使用Excel格式插件 303
用Drill分析网络数据包(PCAP文件) 304
查询PCAP数据文件的例子 304
使用Drill分析Twitter数据 308
在机器学习流程中使用Drill 309
通过Drill进行预测 310
建立与序列化模型 310
编写UDF封装类 311
通过UDF进行预测 313
小结 313
附录A Drill函数列表 315
附录B Drill格式化字符串 331