使用 Arrow Flight SQL 的 JDBC 驱动程序扩展 Arrow 的范围


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

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

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

借助这个新的 JDBC 驱动程序,应用程序可以使用熟悉的 JDBC API 与任何实现 Flight SQL 协议的数据库服务器进行通信。在底层,驱动程序通过 Flight SQL 将查询发送到服务器,并将 Arrow 结果集适配到 JDBC 接口,以便数据库可以支持 JDBC 用户,而无需实现额外的 API 或其自己的 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 的更多信息,请参阅他们的指南