通过 Arrow Flight SQL 的 JDBC 驱动程序扩展 Arrow 的应用范围
已发布 2022年11月01日
作者 The Apache Arrow PMC (pmc)
我们很高兴地宣布,从 10.0.0 版本开始,Arrow 项目现在包含一个基于 Arrow Flight SQL 的 JDBC 驱动程序实现。这要归功于来自数据湖仓平台 Dremio 的软件授权。来自 Dremio 的贡献者开发并开源了这个驱动程序实现,并设计和贡献了 Flight SQL 本身。
Flight SQL 是用于客户端-服务器数据库交互的协议。它定义了客户端应该如何与服务器通信并执行查询、获取结果集等等。请注意,尽管名称如此,Flight SQL 不是 SQL 方言,甚至不特定于 SQL 本身。底层,它构建在 Arrow Flight RPC 之上,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 是
- 列式和基于 Arrow 的,使用 Arrow 作为结果集,以避免不必要的数据复制和转换;
- 专为多个数据库实现而设计,具有高级 C++ 和 Java 库以及 Protobuf 协议定义;并且
- 由于此软件授权,可以通过 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 的更多信息,请参阅他们的指南。