Implementation StatusΒΆ

The following tables summarize the features available in the various official Arrow libraries. All libraries currently follow version 1.0.0 of the Arrow format. See Format Versioning and Stability for details about versioning. Unless otherwise stated, the Python, R, Ruby and C/GLib libraries follow the C++ Arrow library.

Data TypesΒΆ

Data type (primitive)

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

Null

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Boolean

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Int8/16/32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

UInt8/16/32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Float16

βœ“

βœ“ (1)

βœ“

βœ“

Float32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal128

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal256

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Date32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Time32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Timestamp

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Duration

βœ“

βœ“

βœ“

βœ“

βœ“

Interval

βœ“

βœ“

βœ“

βœ“

βœ“

Fixed Size Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Utf8

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large Utf8

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Data type (nested)

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

Fixed Size List

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

List

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large List

βœ“

βœ“

βœ“

βœ“

βœ“

Struct

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Map

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Dense Union

βœ“

βœ“

βœ“

βœ“

βœ“

Sparse Union

βœ“

βœ“

βœ“

βœ“

βœ“

Data type (special)

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

Dictionary

βœ“

βœ“ (2)

βœ“

βœ“ (2)

βœ“ (2)

βœ“ (2)

βœ“

Extension

βœ“

βœ“

βœ“

βœ“

βœ“

Run-End Encoded

βœ“

Notes:

  • (1) Float16 support in C# is only available when targeting .NET 6+.

  • (2) Nested dictionaries not supported

See also

The Arrow Columnar Format specification.

IPC FormatΒΆ

IPC Feature

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

Arrow stream format

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Arrow file format

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Record batches

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Dictionaries

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Replacement dictionaries

βœ“

βœ“

βœ“

βœ“

Delta dictionaries

βœ“ (1)

βœ“ (1)

βœ“

βœ“

Tensors

βœ“

Sparse tensors

βœ“

Buffer compression

βœ“

βœ“ (3)

βœ“

βœ“ (4)

βœ“

βœ“

Endianness conversion

βœ“ (2)

βœ“ (2)

Custom schema metadata

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Notes:

  • (1) Delta dictionaries not supported on nested dictionaries

  • (2) Data with non-native endianness can be byte-swapped automatically when reading.

  • (3) LZ4 Codec currently is quite inefficient. ARROW-11901 tracks improving performance.

  • (4) Compression when writing is not supported, only decompression when reading.

Flight RPCΒΆ

Flight RPC Transport

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

gRPC transport (grpc:, grpc+tcp:)

βœ“

βœ“

βœ“

βœ“

βœ“

gRPC domain socket transport (grpc+unix:)

βœ“

βœ“

βœ“

βœ“

βœ“

gRPC + TLS transport (grpc+tls:)

βœ“

βœ“

βœ“

βœ“

βœ“

UCX transport (ucx:)

βœ“

Supported features in the gRPC transport:

Flight RPC Feature

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

All RPC methods

βœ“

βœ“

βœ“

Γ— (1)

βœ“

Authentication handlers

βœ“

βœ“

βœ“

βœ“ (2)

βœ“

Call timeouts

βœ“

βœ“

βœ“

βœ“

Call cancellation

βœ“

βœ“

βœ“

βœ“

Concurrent client calls (3)

βœ“

βœ“

βœ“

βœ“

βœ“

Custom middleware

βœ“

βœ“

βœ“

βœ“

RPC error codes

βœ“

βœ“

βœ“

βœ“

βœ“

Supported features in the UCX transport:

Flight RPC Feature

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

All RPC methods

Γ— (4)

Authentication handlers

Call timeouts

Call cancellation

Concurrent client calls

βœ“ (5)

Custom middleware

RPC error codes

βœ“

Notes:

  • (1) No support for Handshake or DoExchange.

  • (2) Support using AspNetCore authentication handlers.

  • (3) Whether a single client can support multiple concurrent calls.

  • (4) Only support for DoExchange, DoGet, DoPut, and GetFlightInfo.

  • (5) Each concurrent call is a separate connection to the server (unlike gRPC where concurrent calls are multiplexed over a single connection). This will generally provide better throughput but consumes more resources both on the server and the client.

See also

The Arrow Flight RPC specification.

Flight SQLΒΆ

Note

Flight SQL is still experimental.

The feature support refers to the client/server libraries only; databases which implement the Flight SQL protocol in turn will support/not support individual features.

Feature

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

BeginSavepoint

βœ“

βœ“

BeginTransaction

βœ“

βœ“

CancelQuery

βœ“

βœ“

ClosePreparedStatement

βœ“

βœ“

βœ“

CreatePreparedStatement

βœ“

βœ“

βœ“

CreatePreparedSubstraitPlan

βœ“

βœ“

EndSavepoint

βœ“

βœ“

EndTransaction

βœ“

βœ“

GetCatalogs

βœ“

βœ“

βœ“

GetCrossReference

βœ“

βœ“

βœ“

GetDbSchemas

βœ“

βœ“

βœ“

GetExportedKeys

βœ“

βœ“

βœ“

GetImportedKeys

βœ“

βœ“

βœ“

GetPrimaryKeys

βœ“

βœ“

βœ“

GetSqlInfo

βœ“

βœ“

βœ“

GetTables

βœ“

βœ“

βœ“

GetTableTypes

βœ“

βœ“

βœ“

GetXdbcTypeInfo

βœ“

βœ“

βœ“

PreparedStatementQuery

βœ“

βœ“

βœ“

PreparedStatementUpdate

βœ“

βœ“

βœ“

StatementSubstraitPlan

βœ“

βœ“

StatementQuery

βœ“

βœ“

βœ“

StatementUpdate

βœ“

βœ“

βœ“

See also

The Arrow Flight SQL specification.

C Data InterfaceΒΆ

Feature

C++

Python

R

Rust

Go

Java

C/GLib

Ruby

Julia

C#

Swift

Schema export

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Array export

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Schema import

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Array import

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

See also

The C Data Interface specification.

C Stream InterfaceΒΆ

Feature

C++

Python

R

Rust

Go

Java

C/GLib

Ruby

Julia

C#

Swift

Stream export

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Stream import

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

See also

The C Stream Interface specification.

Third-Party Data FormatsΒΆ

Format

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

Avro

R

CSV

R/W

R (2)

R/W

R/W

R/W

ORC

R/W

R (1)

Parquet

R/W

R (2)

R/W

R/W

Notes:

  • R = Read supported

  • W = Write supported

  • (1) Through JNI bindings. (Provided by org.apache.arrow.orc:arrow-orc)

  • (2) Through JNI bindings to Arrow C++ Datasets. (Provided by org.apache.arrow:arrow-dataset)