目录 前言 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 章 连接Drill 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 使用Nodejs 查询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 使用Apache Hadoop 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 pomxml 文件 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 的pomxml 文件 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 pomxml 文件 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