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)