Apache Drill 专为Hadoop、NoSQL和云存储设计的Schema-free类型的SQL引擎

2022-03-30 15:52:13 浏览数 (1)

Apache Drill是一款开源的数据探索工具,一个分布式SQL查询和分析引擎。它包含了很多专有的设计,来进行高性能分析,支持半结构化数据源(JSON、XML和日志等)和基于应用不断创新的数据格式。在此基础上,Drill不仅支持行业标准的 ANSI SQL,做到开箱即用和快速上手,还支持大数据生态的集成,如 Apache Hive 和 Apache Hbase 等存储系统,即插即用的部署方式。

Apache Drill 关键特性

  • 低延迟的SQL查询。
  • 直接对自描述数据进行动态查询而无需提前定义Schema,如 JSON、Parquet、TEXT 和 Hbase等。
  • 行业标准的查询语法,ANSI SQL。
  • 支持嵌套数据结构。
  • 支持集成Hive。能够查询Hive表和视图,支持所有的Hive数据格式和UDFs。
  • 支持标准的JDBC和ODBC驱动连接BI工具。

选择 Apache Drill 的十大理由

分钟级的上手速度

几分钟即可入门 Apache Drill。您仅需要在 Linux、Mac 或 Windows笔记本上解压发行程序,使用本地文件进行即可查询。不需要设置任何的基础服务,也不用事先定义表对象(下文称 Schema)。通过SQL直接指向数据位置进行查询:

代码语言:javascript复制
$ 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     |

无模式(Schema-free)JSON 模型

Drill是世界上第一个也是唯一一个不要求Schema的分布式SQL引擎。它与 MongoDB 和 ElasticSearch 共享相同的 JSON 模型。不用事先创建Schema和依赖ETL工具,因为Drill能够理解其中的数据结构(模式发现特性)。Drill设计了专有的JSON数据模型,能够支持复杂/嵌套数据的查询,对现代应用程序以及NoSQL中快速衍化的数据结构进行分析。不仅于此,还提供了SQL的扩展性,轻松查询更复杂的数据结构。

Drill是一款支持复杂数据的列式查询引擎。而且支持在内存中用列式表达复杂数据,所以查询JSON数据模型的速度可以媲美列式格式。

原地查询复杂的,半结构化数据

基于Drill的无模式特性,您可以原地查询复杂的,半结构化数据,无需在执行查询前展平(Flatten)或转换(ETL)数据内容。Drill 还为 SQL 提供了灵活的扩展来处理嵌套数据结构。这里有一个示例,通过一个简单的SQL来查询JSON文件中的嵌套元素和数组:

代码语言:javascript复制
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语法(SQL 2003)。您不需要再学习新的“类SQL”语言,也不用为“半功能”的BI工具而生气。Drill不仅支持丰富的数据类型,如 DATE, INTERVAL, TIMESTAMP, 和 VARCHAR等,还支持复杂的查询语法,如 关联子查询和WHERE子句连接,这里有一个示例,在Drill中运行 TPC-H 标准查询:

TPC-H第四个语句
代码语言:javascript复制
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支持标准的 ANSI SQL。商务用户,分析师,数据科学家可以通过Drill的JDBC或者ODBC驱动在标准的BI和分析工具上运行,例如:Tableau, Qlik, MicroStrategy, Spotfire, SAS 和 Excel,开发者也可以在他们的应用中使用 RESTful API(支持流式响应)来定制数据可视化。

Drill的虚拟数据集可以将复杂的NoSQL数据结构对应到兼容BI的结构,帮助用户挖掘和可视化数据。

交互式查询Hive表

Drill可以充分利用Hive中存在的资源。您可以使用Drill在Hive表上运行交互式查询和分析,并且能够访问Hive的所有输入和输出格式(包含自定义 SerDes)。不仅可以连接不同的Hive元存储所包含的表,还可以将异构数据源的表进行连接(联邦查询特性),比如将Hive表关联(Join)Hbase表或文件系统中的日志目录等。这里有一个示例,使用Drill查询Hive表:

代码语言:javascript复制
SELECT `month`, state, sum(order_total) AS sales
FROM hive.orders
GROUP BY `month`, state
ORDER BY 3 DESC LIMIT 5;

联邦查询

Drill天生是为可扩展而设计。Drill支持多种类型的NoSQL数据库和文件系统, 包含 Hbase、MongoDB、ElasticSearch、Cassandra、Druid、Kudu、Kafka、OpenTSDB、HDFS、Amazon S3、Azure Blob Storage、Google Cloud Storage、Swift、NAS和本地文件。可以在单次查询中组合多个数据源(联邦查询)。

当然,您也可以实现一个自定义的存储或数据格式插件来连接任意的数据源类型。Drill能够在单个查询中动态组合多个数据源(联邦查询),且不需要中心化的元存储。这里有一个示例,将Hive表,HBase表(视图)和JSON文件进行组合查询:

代码语言:javascript复制
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;

用户自定义函数(UDFs)

Drill提供了简单的,高性能的 Java API 构建 用户自定义函数 UDFs,所以允许在Drill中添加您的业务逻辑。Drill还支持 Hive UDFs,如果您在Hive中创建了UDFs,那么可以在Drill中直接使用它们而无需修改。

高性能分析

Drill专为高吞吐和低延迟而设计。它不使用 MapReduce、Tez 和 Spark 等类似的通用型计算框架。所以,它更灵活(支持无模式 JSON 模型)和更高性能。Drill的优化器会利用基于规则(RBO)和成本(CBO)技术,以及数据局部性(Data Locality)和算子下推(Pushdown),自动将查询片段下推到后端数据源。不仅于此,Drill提供了列式数据和矢量化执行引擎,进一步提升了内存利用率和CPU运行效率。

水平扩展(从一台笔记本到一千多个节点)

Drill可以很方便地下载和部署,即使您用的是笔记本也如此。当有更大的数据集需要分析时,也可以快速在Hadoop集群上来部署(支持多达1000多个节点)。Drill会利用集群的聚合内存在高效的流水线模型下执行查询。当内存不足时,Drill会自动溢写到磁盘上。重要的是,Drill操作的数据不论是在内存中还是在磁盘上,数据结构完全一致,减少了大量的序列化和反序列化时间。

本文为从大数据到人工智能博主「bajiebajie2333」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://cloud.tencent.com/developer/article/1968600

0 人点赞