通过用于 Arrow Flight SQL 的 JDBC 驱动程序扩展 Arrow 的应用范围


已发布 2022 年 11 月 01 日
作者 Apache Arrow PMC (pmc)

我们很高兴地宣布,自 10.0.0 版本起,Arrow 项目现在包含一个基于 Arrow Flight SQLJDBC 驱动程序实现。这得益于数据湖屋平台 Dremio 的软件捐赠。Dremio 的贡献者开发并开源了此驱动程序实现,此外还设计并贡献了 Flight SQL 本身。

Flight SQL 是一种用于客户端-服务器数据库交互的协议。它定义了客户端如何与服务器通信并执行查询、获取结果集等。请注意,尽管名为 Flight SQL,但它不是 SQL 方言,甚至不专门针对 SQL 本身。其底层基于 Arrow Flight RPC,这是一个用于在网络上高效传输 Arrow 数据的框架。虽然 Flight RPC 灵活且可用于任何类型的应用程序,但从一开始,它就是为了支持 Flight SQL 所支持的用例而设计的。

借助这个新的 JDBC 驱动程序,应用程序可以使用熟悉的 JDBC API 与任何实现 Flight SQL 协议的数据库服务器通信。在底层,驱动程序通过 Flight SQL 将查询发送到服务器,并将 Arrow 结果集适应 JDBC 接口,从而使数据库无需实现额外的 API 或自己的 JDBC 驱动程序即可支持 JDBC 用户。

为何将 JDBC 与 Flight SQL 结合使用?

JDBC 提供了一个面向行的 API,这与 Arrow 的列式结构相反。然而,对于许多应用程序来说,它是一个流行且经过时间考验的选择。例如,许多商业智能 (BI) 工具利用 JDBC 与多个数据库进行通用互操作。一个原生 Arrow 数据库可能仍然希望能够被所有现有软件访问,而无需自己实现多个客户端驱动程序。此外,单独的列式数据传输对于分析用例来说可以带来显著的速度提升

这个 JDBC 驱动程序实现展示了 Arrow 和 Flight SQL 的通用性,并扩大了基于 Arrow 的应用程序的范围。此外,Dremio 还提供了一个基于 Flight SQL 的 ODBC 驱动程序实现,尽管由于依赖许可问题,它尚未成为 Arrow 项目的一部分。

现在,一个数据库只需实现一个单一的线路协议:Flight SQL,就可以支持大量使用 JDBC 或 ODBC 的现有代码,以及原生 Arrow 应用程序。一些项目转而重新实现 Postgres 线路协议以受益于其现有驱动程序。但对于原生 Arrow 数据库来说,这会放弃列式数据的优势。另一方面,Flight SQL 是

  1. 列式和 Arrow 原生,使用 Arrow 作为结果集,以避免不必要的数据复制和转换;
  2. 旨在由多个数据库实现,具有高级 C++ 和 Java 库以及 Protobuf 协议定义;并且
  3. 通过此软件授权,既可以通过 JDBC 和 ODBC 等 API 使用,也可以直接(或通过 ADBC)用于需要列式数据的应用程序。

参与其中

JDBC 驱动程序已合并到 Arrow 10.0.0 版本中,其源代码可在 Arrow 仓库中找到。驱动程序的官方构建可在 Maven Central 上获取。Dremio 已经在利用此驱动程序,我们期待看到在此基础上构建的更多内容。当然,仍有改进空间。如果您有兴趣做出贡献,或有反馈或问题,请通过邮件列表GitHub联系我们。

要了解何时使用 Flight SQL JDBC 驱动程序与 Flight SQL 原生客户端库,请参阅 Dremio 演示文稿的此部分,“Apache Arrow Flight SQL:数据库高性能数据传输的通用标准”(从 22:23 开始)。要了解 Dremio 如何使用 Apache Arrow 的更多信息,请参阅他们的指南