ADBC (Arrow)

Connect & Ingest data from / to multiple databases via Arrow Database Connectivity (ADBC)

Arrow Database Connectivity (ADBC) provides a standardized interface for accessing various databases using the Apache Arrow columnar format. ADBC enables efficient, high-performance data movement with zero-copy semantics and native Arrow support (v1.5.2+)

Supported Database Types

Sling supports the following databases via ADBC drivers:

  • PostgreSQL - Full support via ADBC PostgreSQL driver

  • MySQL - Support via ADBC MySQL driver (v9.4+)

  • SQL Server - Full support via ADBC SQL Server driver

  • Snowflake - Full support via ADBC Snowflake driver

  • SQLite - Support via ADBC SQLite driver

  • DuckDB - Full support via ADBC DuckDB driver

  • BigQuery - Full support via ADBC BigQuery driver

  • Trino - Support via ADBC Trino driver (v4.0+)

Setup

Before using ADBC connections, you need to install the appropriate ADBC driver using the dbc CLI tool (see details herearrow-up-right):

# Install drivers for your target databases
dbc install postgresql
dbc install mysql
dbc install trino
dbc install snowflake
# ... etc

Drivers are automatically installed to:

  • macOS: ~/Library/Application Support/ADBC/Drivers

  • Linux: ~/.local/share/ADBC/Drivers

  • Windows: %LOCALAPPDATA%\ADBC\Drivers

Sling will automatically discover installed drivers from these locations.

ADBC Driver Manager Installation

If your system does not have the ADBC Driver Manager library installed, you may need to install it manually and set the ADBC_DRIVER_MANAGER_LIB environment variable to point to the library file.

Installation

Using Conda (Recommended):

Using pip:

Finding the Library

  • Conda path: $CONDA_PREFIX/lib/libadbc_driver_manager.dylib

  • Pip path: Inside your site-packages/adbc_driver_manager/ directory

  • System search: mdfind -name libadbc_driver_manager.dylib

Setting the Environment Variable

Enabling ADBC on Connections

To use ADBC with your existing database connections, simply add use_adbc: true to your connection configuration. This allows you to keep your original connection properties and format while enabling ADBC's high-performance data transfer.

Connection Properties

The following ADBC-specific properties can be added to any supported database connection:

  • use_adbc (optional) -> Enable ADBC driver for this connection (true or false). Default is false.

  • adbc_uri (optional) -> Override the automatically constructed ADBC URI. Sling automatically builds the ADBC URI from your connection properties, but you can specify a custom URI if needed.

Database-Specific Examples

PostgreSQL with ADBC

ADBC URI format: postgresql://user:password@host:port/database

Official Documentation: Apache ADBC PostgreSQL Driverarrow-up-right

MySQL with ADBC

ADBC URI format: user@tcp(host:port)/database

Official Documentation: Apache ADBC MySQL Driverarrow-up-right

SQL Server with ADBC

ADBC URI format: mssql://user:password@host:port/database

Official Documentation: Apache ADBC SQL Server Driverarrow-up-right

Snowflake with ADBC

ADBC URI format: snowflake://user:password@account/database/schema

Official Documentation: Apache ADBC Snowflake Driverarrow-up-right

DuckDB with ADBC

ADBC URI format: duckdb:///path/to/file.db or duckdb://:memory:

Official Documentation: Apache ADBC DuckDB Driverarrow-up-right

SQLite with ADBC

ADBC URI format: sqlite:///path/to/file.db

Official Documentation: Apache ADBC SQLite Driverarrow-up-right

BigQuery with ADBC

ADBC URI format: bigquery://project

Official Documentation: Apache ADBC BigQuery Driverarrow-up-right

Trino with ADBC

ADBC URI format: http://user@host:port?catalog=catalog&schema=schema

Official Documentation: Apache ADBC Trino Driverarrow-up-right

Using sling conns

Here are examples of enabling ADBC on existing connections:

Environment Variable

Sling Env File YAML

See here to learn more about the sling env.yaml file.

Additional Resources

If you are facing issues connecting, please reach out to us at [email protected]envelope, on discordarrow-up-right or open a Github Issue herearrow-up-right.

Last updated

Was this helpful?