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, or later minor versions that are compatible with version 1.0.0. 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

JS

C#

Rust

Julia

Swift

nanoarrow

Null

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Boolean

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Int8/16/32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

UInt8/16/32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Float16

βœ“

βœ“ (1)

βœ“

βœ“

βœ“ (2)

βœ“

βœ“

βœ“

Float32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal32

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal64

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal128

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Decimal256

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Date32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Time32/64

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Timestamp

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Duration

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Interval

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Fixed Size Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Binary

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large Binary

βœ“

βœ“

βœ“

βœ“

(4)

βœ“

βœ“

βœ“

Utf8

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large Utf8

βœ“

βœ“

βœ“

βœ“

(4)

βœ“

βœ“

βœ“

Binary View

βœ“

βœ“

βœ“

βœ“

βœ“

Utf8 View

βœ“

βœ“

βœ“

βœ“

βœ“

Data type (nested)

C++

Java

Go

JS

C#

Rust

Julia

Swift

nanoarrow

Fixed Size List

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

List

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Large List

βœ“

βœ“

βœ“

(4)

βœ“

βœ“

βœ“

List View

βœ“

βœ“

βœ“

βœ“

βœ“

Large List View

βœ“

βœ“

βœ“

βœ“

Struct

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Map

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Dense Union

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Sparse Union

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Data type (special)

C++

Java

Go

JS

C#

Rust

Julia

Swift

nanoarrow

Dictionary

βœ“

βœ“ (3)

βœ“

βœ“

βœ“

βœ“ (3)

βœ“

βœ“

Extension

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Run-End Encoded

βœ“

βœ“

βœ“

βœ“

Canonical Extension types

C++

Java

Go

JavaScript

C#

Rust

Julia

Swift

Fixed shape tensor

βœ“

βœ“

Variable shape tensor

βœ“

JSON

βœ“

βœ“

βœ“

Opaque

βœ“

βœ“

βœ“

βœ“

UUID

βœ“

βœ“

βœ“

8-bit Boolean

βœ“

βœ“

βœ“

Parquet Variant

βœ“

Notes:

  • (1) Casting to/from Float16 in Java is not supported.

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

  • (3) Nested dictionaries not supported

  • (4) C# large array types are provided to help with interoperability with other libraries, but these do not support buffers larger than 2 GiB and an exception will be raised if trying to import an array that is too large.

See also

The Arrow Columnar Format and the Canonical Extension Types specification.

IPC Format#

IPC Feature

C++

Java

Go

JS

C#

Rust

Julia

Swift

nanoarrow

Arrow stream format

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“ (4)

Arrow file format

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Record batches

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Dictionaries

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Replacement dictionaries

βœ“

βœ“

βœ“

βœ“

βœ“

Delta dictionaries

βœ“ (1)

βœ“ (1)

βœ“

βœ“

βœ“

βœ“

Tensors

βœ“

Sparse tensors

βœ“

Buffer compression

βœ“

βœ“ (3)

βœ“

βœ“

βœ“

βœ“

Endianness conversion

βœ“ (2)

βœ“ (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) The nanoarrow IPC implementation is only implemented for reading IPC streams.

Flight RPC#

Flight RPC Transport

C++

Java

Go

JS

C#

Rust

Julia

Swift

gRPC transport (grpc:, grpc+tcp:)

βœ“

βœ“

βœ“

βœ“

βœ“

gRPC domain socket transport (grpc+unix:)

βœ“

βœ“

βœ“

βœ“

βœ“

gRPC + TLS transport (grpc+tls:)

βœ“

βœ“

βœ“

βœ“

βœ“

Supported features in the gRPC transport:

Flight RPC Feature

C++

Java

Go

JS

C#

Rust

Julia

Swift

All RPC methods

βœ“

βœ“

βœ“

βœ“

βœ“

Authentication handlers

βœ“

βœ“

βœ“

βœ“ (1)

βœ“

Call timeouts

βœ“

βœ“

βœ“

βœ“

Call cancellation

βœ“

βœ“

βœ“

βœ“

Concurrent client calls (2)

βœ“

βœ“

βœ“

βœ“

βœ“

Custom middleware

βœ“

βœ“

βœ“

βœ“

RPC error codes

βœ“

βœ“

βœ“

βœ“

βœ“

Notes:

  • (1) Support using AspNetCore authentication handlers.

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

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

JS

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

nanoarrow

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

nanoarrow

Stream export

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

Stream import

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

βœ“

See also

The C Stream Interface specification.

Third-Party Data Formats#

Format

C++

Java

Go

JS

C#

Rust

Julia

Swift

Avro

R

R

R/W

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)