实现状态#

下表总结了各种官方 Arrow 库中可用的功能。所有库目前都遵循 Arrow 格式的 1.0.0 版本,或与 1.0.0 版本兼容的更高次要版本。有关版本控制的详细信息,请参阅格式版本控制和稳定性。除非另有说明,否则 Python、R、Ruby 和 C/GLib 库遵循 C++ Arrow 库。

数据类型#

数据类型(基本类型)

C++

Java

Go

JS

C#

Rust

Julia

Swift

nanoarrow

空值

布尔值

Int8/16/32/64

UInt8/16/32/64

Float16

✓ (1)

✓ (2)

Float32/64

Decimal32

Decimal64

Decimal128

Decimal256

Date32/64

Time32/64

时间戳

持续时间

时间间隔

固定大小二进制

二进制

大二进制

(4)

Utf8

大 Utf8

(4)

二进制视图

大二进制视图

Utf8 视图

大 Utf8 视图

数据类型(嵌套类型)

C++

Java

Go

JS

C#

Rust

Julia

Swift

nanoarrow

固定大小列表

列表

大列表

(4)

列表视图

大列表视图

结构体

映射

密集联合

稀疏联合

数据类型(特殊类型)

C++

Java

Go

JS

C#

Rust

Julia

Swift

nanoarrow

字典

✓ (3)

✓ (3)

扩展

行程长度编码

规范扩展类型

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

固定形状张量

可变形状张量

JSON

不透明

UUID

8 位布尔值

备注

  • (1) Java 不支持与 Float16 的相互转换。

  • (2) C# 中的 Float16 支持仅在面向 .NET 6+ 时可用。

  • (3) 不支持嵌套字典

  • (4) C# 大数组类型是为了帮助与其他库的互操作性而提供的,但它们不支持大于 2 GiB 的缓冲区,如果尝试导入过大的数组,则会引发异常。

另请参阅

Arrow 列式格式规范扩展类型规范。

IPC 格式#

IPC 功能

C++

Java

Go

JS

C#

Rust

Julia

Swift

nanoarrow

Arrow 流格式

✓ (4)

Arrow 文件格式

记录批次

字典

替换字典

增量字典

✓ (1)

✓ (1)

张量

稀疏张量

缓冲区压缩

✓ (3)

字节序转换

✓ (2)

✓ (2)

✓ (2)

自定义模式元数据

备注

  • (1) 嵌套字典不支持增量字典

  • (2) 读取时可以自动对非原生字节序的数据进行字节交换。

  • (3) LZ4 编解码器目前效率相当低。ARROW-11901 正在跟踪改进性能。

  • (4) nanoarrow IPC 实现仅用于读取 IPC 流。

另请参阅

序列化和进程间通信 (IPC) 规范。

Flight RPC#

Flight RPC 传输

C++

Java

Go

JS

C#

Rust

Julia

Swift

gRPC 传输 (grpc:, grpc+tcp:)

gRPC 域套接字传输 (grpc+unix:)

gRPC + TLS 传输 (grpc+tls:)

UCX 传输 (ucx:) (1)

gRPC 传输中支持的功能

Flight RPC 功能

C++

Java

Go

JS

C#

Rust

Julia

Swift

所有 RPC 方法

身份验证处理程序

✓ (2)

调用超时

调用取消

并发客户端调用 (3)

自定义中间件

RPC 错误代码

UCX 传输中支持的功能

Flight RPC 功能

C++

Java

Go

JS

C#

Rust

Julia

Swift

所有 RPC 方法

✓ (4)

身份验证处理程序

调用超时

调用取消

并发客户端调用

✓ (5)

自定义中间件

RPC 错误代码

备注

  • (1) Flight UCX 传输已在 19.0.0 版本中弃用。

  • (2) 支持使用 AspNetCore 身份验证处理程序。

  • (3) 单个客户端是否可以支持多个并发调用。

  • (4) 仅支持 DoExchange、DoGet、DoPut 和 GetFlightInfo。

  • (5) 每个并发调用都是到服务器的单独连接(不像 gRPC 中的并发调用在单个连接上进行多路复用)。这通常会提供更好的吞吐量,但会在服务器和客户端上消耗更多资源。

另请参阅

Arrow Flight RPC 规范。

Flight SQL#

注意

Flight SQL 仍处于实验阶段。

功能支持仅指客户端/服务器库;依次实现 Flight SQL 协议的数据库将支持/不支持单个功能。

功能

C++

Java

Go

JS

C#

Rust

Julia

Swift

BeginSavepoint(开始保存点)

BeginTransaction(开始事务)

CancelQuery(取消查询)

ClosePreparedStatement(关闭预处理语句)

CreatePreparedStatement(创建预处理语句)

CreatePreparedSubstraitPlan(创建预处理 Substrait 计划)

EndSavepoint(结束保存点)

EndTransaction(结束事务)

GetCatalogs(获取目录)

GetCrossReference(获取交叉引用)

GetDbSchemas(获取数据库模式)

GetExportedKeys(获取导出键)

GetImportedKeys(获取导入键)

GetPrimaryKeys(获取主键)

GetSqlInfo(获取 SQL 信息)

GetTables(获取表)

GetTableTypes(获取表类型)

GetXdbcTypeInfo(获取 XDBC 类型信息)

PreparedStatementQuery(预处理语句查询)

PreparedStatementUpdate(预处理语句更新)

StatementSubstraitPlan(语句 Substrait 计划)

StatementQuery(语句查询)

StatementUpdate(语句更新)

另请参阅

Arrow Flight SQL 规范。

C 数据接口#

功能

C++

Python

R

Rust

Go

Java

C/GLib

Ruby

Julia

C#

Swift

nanoarrow

模式导出

数组导出

模式导入

数组导入

另请参阅

C 数据接口 规范。

C 流接口#

功能

C++

Python

R

Rust

Go

Java

C/GLib

Ruby

Julia

C#

Swift

nanoarrow

流导出

流导入

另请参阅

C 流接口 规范。

第三方数据格式#

格式

C++

Java

Go

JS

C#

Rust

Julia

Swift

Avro

R

R

CSV

读/写

读 (2)

读/写

读/写

读/写

ORC

读/写

读 (1)

Parquet

读/写

读 (2)

读/写

读/写

备注

  • = 支持读取

  • = 支持写入

  • (1) 通过 JNI 绑定。(由 org.apache.arrow.orc:arrow-orc 提供)

  • (2) 通过 JNI 绑定到 Arrow C++ 数据集。(由 org.apache.arrow:arrow-dataset 提供)