ADBC API 标准¶
本文档总结了 ADBC API 的通用功能集,仅供参考。
有关 ADBC API 的权威定义,请参阅以下来源
有关 C/C++ 详细信息,请参阅 adbc.h。
有关 Go 详细信息,请参阅 源代码。
有关 Java 详细信息,请参阅 源代码,特别是包
org.apache.arrow.adbc.core。
adbc.h 被视为权威。
数据库¶
数据库保存由多个连接共享的状态。通常,这意味着通用配置和缓存。对于内存数据库,它提供了保存内存数据库所有权的位置。
C/C++:
AdbcDatabaseGo:
Driver
连接¶
连接是到数据库的单个逻辑连接。
C/C++:
AdbcConnectionGo:
Connection
自动提交¶
默认情况下,连接应以自动提交模式运行;即,查询在执行后立即生效。这可以通过手动调用 commit/rollback 来禁用,但并非所有实现都支持此功能。
Go:
OptionKeyAutoCommitJava:
org.apache.arrow.adbc.core.AdbcConnection#setAutoCommit(boolean)
元数据¶
ADBC 暴露了关于数据库的各种元数据,例如存在哪些目录、模式和表,表的 Arrow 模式等等。
统计信息¶
注意
自 API 版本 1.1.0 起
ADBC 暴露表/列的统计信息,例如(唯一)行数、最小值/最大值等。这里的目标是让 ADBC 在联邦场景中更好地工作,其中一个查询引擎想从另一个数据库读取 Arrow 数据。拥有统计信息可以使“外部”查询规划器就联接顺序等做出更好的选择,甚至决定完全跳过读取数据。
语句¶
语句保存与查询执行相关的状态。它们代表一次性查询和预编译语句。它们可以重用,但重用会使该语句的先前结果集失效。(参见 并发和线程安全。)
C/C++:
AdbcStatementGo:
StatementJava:
org.apache.arrow.adbc.core.AdbcStatement
批量摄取¶
ADBC 提供了明确的机制将 Arrow 数据批次摄取到数据库表中。对于支持此功能的数据库,这可以避免典型绑定-插入循环的开销。此外,这也(大部分)使用户无需了解其数据库的正确 SQL 语法。
C/C++:
ADBC_INGEST_OPTION_TARGET_TABLE及相关选项。Go:
OptionKeyIngestTargetTableJava:
org.apache.arrow.adbc.core.AdbcConnection#bulkIngest(String, org.apache.arrow.adbc.core.BulkIngestMode)
取消¶
注意
自 API 版本 1.1.0 起
查询(以及隐含表示查询的操作,例如获取 统计信息)可以被取消。
分区结果集¶
ADBC 允许驱动程序向客户端显式公开分区和/或分布式结果集。(这类似于 Flight RPC/Flight SQL 中的功能。)客户端可以利用这一点在多个线程、进程或机器上分配结果集上的计算。
Go:
Statement.ExecutePartitionsJava:
org.apache.arrow.adbc.core.AdbcStatement#executePartitioned()
原则上,供应商可以返回分区执行的结果,而不是一次性返回所有结果。增量执行允许驱动程序公开此功能。启用后,每次调用 ExecutePartitions 时,将返回可用的读取端点,而不是阻塞等待检索所有端点。
注意
自 API 版本 1.1.0 起
生命周期与用法¶
基本用法¶
准备语句和绑定参数是可选的。¶
消耗结果集¶
这等同于读取许多 Arrow 库所说的 RecordBatchReader。¶
批量数据摄取¶
无需准备语句。¶
仅更新查询(无结果集)¶
准备语句和绑定参数是可选的。¶
分区执行¶
错误处理¶
错误处理策略因语言而异。
在 C 中,大多数方法接受一个 AdbcError。在 Go 中,大多数方法返回一个可以转换为 AdbcError 的错误。在 Java 中,大多数方法会引发一个 AdbcException。
在所有情况下,错误都包含
一个状态码,
一条错误消息,
一个可选的供应商代码(特定于供应商的状态码),
一个可选的 5 个字符的“SQLSTATE”代码(类似 SQL 的特定于供应商的代码)。
丰富的错误元数据¶
注意
自 API 版本 1.1.0 起
驱动程序可以暴露额外的丰富错误元数据。这可用于返回结构化的错误信息。例如,驱动程序可以使用类似 Googleapis ErrorDetails 的内容。
在 C、Go 和 Java 中,AdbcError、AdbcError 和 AdbcException 分别暴露了一个附加元数据列表。对于 C,请参阅 AdbcError 的文档,了解结构体是如何在保持 ABI 的同时扩展的。
变更日志¶
版本 1.1.0¶
info 键 ADBC_INFO_DRIVER_ADBC_VERSION 可用于检索驱动程序的受支持的 ADBC 版本。
添加了规范选项“uri”、“username”和“password”,以使不同驱动程序之间的配置保持一致。
添加了 取消 以及获取和设置不同类型选项的能力。(以前,您可以设置字符串选项,但无法获取选项值或获取/设置其他类型的值。)这可用于通过一对新的规范选项来获取和设置当前活动的目录和/或模式。
批量摄取 支持另外两种模式
“adbc.ingest.mode.replace” 将删除现有数据,然后表现得像“create”。
“adbc.ingest.mode.create_append” 将表现得像“create”,除非表已存在,否则它不会报错。
添加了 丰富的错误元数据,允许客户端获取额外的错误元数据。
添加了检索表/列 统计信息 的功能。这里的目标是让 ADBC 在联邦场景中更好地工作,其中一个查询引擎想从另一个数据库读取 Arrow 数据。
增量执行 允许在结果集的某个分区可用时进行流式传输,而不是阻塞并等待查询执行完成后再读取结果。