Driver Implementation Status

Warning

There is a known problem on macOS x86_64 when using two drivers written in Go in the same process (unless working in a pure-Go application), where using the second driver may crash. For more details, see GH-1841.

Note

Drivers that support C/C++ can also be used from C#, GLib, Go, Python, R, Ruby, and Rust, regardless of their implementation language.

Driver Status

Experimental drivers are not feature-complete and the implementation is still progressing. Beta drivers are (mostly) feature-complete but have only been available for a short time. Stable drivers are (mostly) feature-complete (as much as possible for the underlying database) and have been available/tested for a while.

Feature Support

Vendor

Implementation

Driver Status

Packages [1]

Apache Arrow Flight SQL

C#

Beta

NuGet

Apache Arrow Flight SQL

Go

Stable

conda-forge (adbc-driver-flightsql, libadbc-driver-flightsql), PyPI, R-multiverse

Apache Arrow Flight SQL

Java

Beta

Maven

Apache DataFusion

Rust

Experimental

crates.io

Apache Hive

C#

Experimental

Apache Impala

C#

Experimental

Apache Spark

C#

Experimental

Databricks

C#

Experimental

DuckDB [2]

C/C++

Stable

conda-forge, PyPI

Google BigQuery

C#

Beta

NuGet

Google BigQuery

Go

Experimental

conda-forge (adbc-driver-bigquery, libadbc-driver-bigquery), PyPI, R-multiverse

JDBC

Java

Beta

Maven

PostgreSQL

C/C++

Stable

conda-forge (adbc-driver-postgresql, libadbc-driver-postgresql), CRAN, PyPI

SQLite

C/C++

Stable

conda-forge (adbc-driver-sqlite, libadbc-driver-sqlite), CRAN, PyPI

Snowflake

Go

Stable

conda-forge (adbc-driver-snowflake, libadbc-driver-snowflake), crates.io, Go, NuGet, PyPI, R-multiverse

Feature Support

N/A indicates that it is not possible to support this feature in the underlying database.

See individual driver documentation pages for full details.

Bulk Ingestion

Does the driver support bulk ingestion of data (creating or appending to a database table from an Arrow table)?

Database Metadata

Does the driver support functions like AdbcConnectionGetObjects() that get metadata about the database catalog, etc.?

Parameterized Queries

Does the driver support binding query parameters?

Partitioned Data

Being able to read individual chunks of a (generally distributed) result set (AdbcStatementExecutePartitions()).

Prepared Statements

Does the driver support binding query parameters?

Full Type Support

Does the driver map all database types to/from equivalent Arrow types, as much as is possible?

Select Queries

Does the driver support queries returning result sets?

SQL

Does the driver support submitting SQL queries?

Transactions

Does the driver support explicit transactions (the default is to assume auto-commit)?

Substrait

Does the driver support submitting Substrait plans?

Update Queries

Does the driver support queries not returning result sets?

General features

Driver

Full Type Support

SQL

Substrait

Flight SQL (Go)

Y

Y

N

Flight SQL (Java)

Y

Y

N

JDBC

N

Y

N/A

PostgreSQL

N

Y

N/A

SQLite

Y

Y

N/A

Statement/query-level features

Driver

Incremental Queries

Partitioned Data

Parameterized Queries

Prepared Statements

Select Queries

Update Queries

Flight SQL (Go)

Y

Y

Y

Y

Y

Y

Flight SQL (Java)

N

Y

Y

Y

Y

Y

JDBC

N/A

N/A

Y

Y

Y

Y

PostgreSQL

N/A

N/A

Y [3]

Y

Y

Y

SQLite

N/A

N/A

Y

Y

Y

Y

Connection/database-level features

Driver

Bulk Ingestion

Database Metadata (catalogs, etc.)

Transactions

Flight SQL (Go)

N

Y

Y

Flight SQL (Java)

Y

Y

N

JDBC

Y

Y

N

PostgreSQL

Y

Y

Y

SQLite

Y

Y

Y