ADBC:Arrow 数据库连接#
ADBC 的完整文档可在 https://arrow.apache.org/adbc/ 找到。
基本原理#
Arrow 生态系统缺乏围绕 Arrow 数据构建的标准数据库接口,尤其是在高效获取大型数据集(即最小或无需序列化和复制)方面。如果没有通用 API,最终结果将是各种自定义协议(例如 BigQuery、Snowflake)和适配器(例如 Turbodbc)散布在各种语言中。使用者必须费力地包装各个系统(如 DBI 正在考虑 和 Trino 使用连接器所做的那样)。
ADBC 旨在提供一个基于 Arrow 的最小数据库客户端 API 标准,用于 C、Go 和 Java(以及其他语言的绑定)。应用程序代码遵循此 API 标准(与使用 JDBC 或 ODBC 的方式非常相似),但以 Arrow 格式获取结果集(例如,通过 C 数据接口)。然后,它们链接到该标准的实现:直接链接到特定数据库的供应商提供的驱动程序,或链接到跨多个驱动程序进行抽象的驱动程序管理器。驱动程序使用特定于数据库的 API(例如 Flight SQL)实现该标准。
目标#
提供一个跨语言的、基于 Arrow 的 API,以标准化客户端如何向数据库提交查询以及从数据库获取 Arrow 数据。
支持 SQL 方言和新兴的 Substrait 标准。
支持显式分区/分布式结果集,以便更好地与现代分布式系统协同工作。
允许各种实现以最大化覆盖范围。
非目标#
在所有用例中替换 JDBC/ODBC,尤其是在 OLTP 用例中。
要求或规定 Arrow 生态系统中的特定数据库协议。
用例示例#
一个 C 或 C++ 应用程序希望从 Postgres 数据库中检索大量数据以供进一步分析。该应用程序针对 ADBC 标头进行编译,并通过 ADBC API 执行查询。该应用程序链接到 ADBC libpq 驱动程序。在运行时,驱动程序通过 Postgres 客户端库向数据库提交查询,并检索面向行的结果,然后将其转换为 Arrow 格式,然后再将其返回给应用程序。
如果应用程序希望从支持 Flight SQL 的数据库中检索数据,则它将链接到 ADBC Flight SQL 驱动程序。在运行时,驱动程序将通过 Flight SQL 提交查询并获取 Arrow 数据,然后将其未经更改且未复制地传递给应用程序。(应用程序可能需要编辑 SQL 查询,因为 ADBC 不会在 SQL 方言之间进行转换。)
如果应用程序希望与多个数据库一起使用,则它将链接到 ADBC 驱动程序管理器,并在运行时指定所需的驱动程序。驱动程序管理器会将 API 调用传递给正确的驱动程序,后者处理请求。
ADBC API 标准 1.0.0#
ADBC 是一组特定于语言的接口定义,可以由供应商特定的“驱动程序”或供应商中立的“驱动程序管理器”直接实现。
标准的 1.0.0 版本对应于存储库 apache/arrow-adbc
的标签 adbc-1.0.0,该标签是提交 f044edf5256abfb4c091b0ad2acc73afea2c93c0。请注意,这与实际实现的版本发布分开。
有关详细信息,请参阅特定于语言的页面
更新此规范#
ADBC 的版本控制与核心 Arrow 项目分开。API 标准和组件(驱动程序管理器、驱动程序)也分别进行版本控制,但两者都遵循语义版本控制。
例如:组件可以进行向后兼容的版本发布,例如 1.0.0、1.0.1、1.1.0、1.2.0 等。它们可以发布向后不兼容的版本,例如 2.0.0,但这些版本仍然实现 API 标准版本 1.0.0。
同样,本文档描述了 ADBC API 标准版本 1.0.0。如果/当进行 ABI 兼容的修订时(例如,定义新的标准选项),下一个版本将为 1.1.0。如果进行了不兼容的更改(例如新的 API 函数),下一个版本将为 2.0.0。