Apache Drill基本介绍
Apache Drill基本介绍
Drill 是一个用于大数据探索的 Apache 开源 SQL 查询引擎。 Drill 的设计初衷是支持对来自现代大数据应用程序的半结构化和快速发展的数据进行高性能分析,同时仍然提供行业标准查询语言 ANSI SQL 的熟悉度和生态系统。 Drill 提供与现有 Apache Hive 和 Apache HBase 部署的即插即用集成。
Apache Drill主要特征
- 低延迟 SQL 查询
- 对文件(例如 JSON、Parquet、文本)和 HBase 表中的自描述数据进行动态查询,而无需在 Hive 元存储中定义元数据。
- ANSI SQL
- 嵌套数据支持
- 与 Apache Hive 集成(查询 Hive 表和视图,支持所有 Hive 文件格式和 Hive UDF)
- 使用标准 JDBC/ODBC 驱动程序的 BI/SQL 工具集成
为什么选择Apache Drill
1分钟快速入门
只需几分钟即可开始使用 Drill。 在您的 Linux、Mac 或 Windows 笔记本电脑上解压 Drill 软件,并对本地文件运行查询。 无需设置任何基础设施或定义模式。 指向数据即可,如文件、目录、HBase表、drill中的数据。
$ tar -xvf apache-drill-<version>.tar.gz
$ <install directory>/bin/drill-embedded
0: jdbc:drill:zk=local> SELECT * FROM cp.`employee.json` LIMIT 5;
|--------------|----------------------------|---------------------|---------------|--------------|----------------------------|-----------|----------------|-------------|------------------------|----------|----------------|----------------------|-----------------|---------|-----------------------|
| employee_id | full_name | first_name | last_name | position_id | position_title | store_id | department_id | birth_date | hire_date | salary | supervisor_id | education_level | marital_status | gender | management_role |
|--------------|----------------------------|---------------------|---------------|--------------|----------------------------|-----------|----------------|-------------|------------------------|----------|----------------|----------------------|-----------------|---------|-----------------------|
| 1 | Sheri Nowmer | Sheri | Nowmer | 1 | President | 0 | 1 | 1961-08-26 | 1994-12-01 00:00:00.0 | 80000.0 | 0 | Graduate Degree | S | F | Senior Management |
| 2 | Derrick Whelply | Derrick | Whelply | 2 | VP Country Manager | 0 | 1 | 1915-07-03 | 1994-12-01 00:00:00.0 | 40000.0 | 1 | Graduate Degree | M | M | Senior Management |
| 4 | Michael Spence | Michael | Spence | 2 | VP Country Manager | 0 | 1 | 1969-06-20 | 1998-01-01 00:00:00.0 | 40000.0 | 1 | Graduate Degree | S | M | Senior Management |
| 5 | Maya Gutierrez | Maya | Gutierrez | 2 | VP Country Manager | 0 | 1 | 1951-05-10 | 1998-01-01 00:00:00.0 | 35000.0 | 1 | Bachelors Degree | M | F | Senior Management |
无模式 JSON 模型
Drill 是世界上第一个也是唯一一个不需要模式的分布式 SQL 引擎。 它与 MongoDB 和 Elasticsearch 共享相同的无模式 JSON 模型。 无需定义和维护模式或转换数据 (ETL)。 Drill 自动理解数据的结构。
就地查询复杂的半结构化数据
使用 Drill 的无模式 JSON 模型,您可以就地查询复杂的、半结构化的数据。 无需在查询执行之前或期间展平或转换数据。 Drill 还提供了对 SQL 的直观扩展以处理嵌套数据。 下面是一个对 JSON 文件的简单查询,演示了如何访问嵌套元素和数组:
SELECT * FROM (SELECT t.trans_id,
t.trans_info.prod_id[0] AS prod_id,
t.trans_info.purch_flag AS purchased
FROM `clicks/clicks.json` t) sq
WHERE sq.prod_id BETWEEN 700 AND 750 AND
sq.purchased = 'true'
ORDER BY sq.prod_id;
真正的 SQL——不是“类 SQL”
Drill 支持标准的 SQL:2003 语法。 无需学习新的“类似 SQL”的语言或使用半功能 BI 工具。 Drill 支持许多数据类型,包括 DATE、INTERVAL、TIMESTAMP 和 VARCHAR,以及复杂的查询结构,例如关联子查询和 WHERE 子句中的连接。 这是在 Drill 中运行的 TPC-H 标准查询的示例:
TPC-H query 4
SELECT o.o_orderpriority, COUNT(*) AS order_count
FROM orders o
WHERE o.o_orderdate >= DATE '1996-10-01'
AND o.o_orderdate < DATE '1996-10-01' + INTERVAL '3' month
AND EXISTS(
SELECT * FROM lineitem l
WHERE l.l_orderkey = o.o_orderkey
AND l.l_commitdate < l.l_receiptdate
)
GROUP BY o.o_orderpriority
ORDER BY o.o_orderpriority;
利用标准的 BI 工具
Drill 与标准的 BI 工具一起工作。 您可以使用现有的工具,例如 Tableau、MicroStrategy、QlikView 和 Excel。
Hive 表的交互式查询
Apache Drill 让您可以利用您在 Hive 上的投资。 您可以使用 Drill 在 Hive 表上运行交互式查询并访问所有 Hive 输入/输出格式(包括自定义 SerDes)。 您可以连接与不同 Hive 元存储关联的表,也可以连接 Hive 表与 HBase 表或日志文件目录。 这是 Drill 中针对 Hive 表的一个简单查询:
SELECT `month`, state, sum(order_total) AS sales
FROM hive.orders
GROUP BY `month`, state
ORDER BY 3 DESC LIMIT 5;
访问多个数据源
Drill 是可扩展的。 您可以开箱即用地将 Drill 连接到文件系统(本地或分布式,例如 S3 和 HDFS)、HBase 和 Hive。 你可以实现一个存储插件来使 Drill 与任何其他数据源一起工作。 Drill 可以在单个查询中动态组合来自多个数据源的数据,没有集中的元数据定义。 下面是一个结合了来自 Hive 表、HBase 表(视图)和 JSON 文件的数据的查询:
SELECT custview.membership, sum(orders.order_total) AS sales
FROM hive.orders, custview, dfs.`clicks/clicks.json` c
WHERE orders.cust_id = custview.cust_id AND orders.cust_id = c.user_info.cust_id
GROUP BY custview.membership
ORDER BY 2;
用于 Drill 和 Hive 的用户定义函数 (UDF)
Drill 公开了一个简单、高性能的 Java API 来构建自定义用户定义函数 (UDF),以便将您自己的业务逻辑添加到 Drill。 Drill 还支持 Hive UDF。 如果您已经在 Hive 中构建了 UDF,则可以在不进行任何修改的情况下将它们与 Drill 重用。
高性能
Drill 是为高吞吐量和低延迟而设计的。 它不使用像 MapReduce、Tez 或 Spark 这样的通用执行引擎。 因此,Drill 是灵活的(无模式的 JSON 模型)和高性能的。 Drill 的优化器利用基于规则和成本的技术,以及数据局部性和运算符下推,这是将查询片段下推到后端数据源的能力。 Drill 还提供了列式和矢量化执行引擎,从而提高了内存和 CPU 效率。
从一台笔记本电脑扩展到 1000 个节点的集群
Drill 可以通过简单的下载获得,您可以在笔记本电脑上运行。 当您准备好分析更大的数据集时,在您的 Hadoop 集群(最多 1000 个商用服务器)上部署 Drill。 Drill 利用集群中的聚合内存来使用乐观的流水线模型执行查询,并在工作集不适合内存时自动溢出到磁盘。