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

Installing ADBC Drivers

Before using ADBC connections, you need to install the native ADBC driver library for your target database. The recommended way is using the dbc CLI toolarrow-up-right:

# First, install dbc itself
# macOS (Homebrew)
brew install columnar-tech/tap/dbc

# Linux/macOS (shell script)
curl -LsSf https://dbc.columnar.tech/install.sh | sh

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://dbc.columnar.tech/install.ps1 | iex"

Then install drivers for your target databases:

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.

circle-info

Sling includes a built-in ADBC driver manager — you do not need to install the Python adbc-driver-manager package or any separate driver manager library. You only need the native driver library for your specific database (e.g., libadbc_driver_postgresql.so).

Manual Driver Installation

If you prefer not to use dbc, you can install ADBC driver libraries manually:

Using Homebrew or by downloading pre-built libraries from the ADBC releasesarrow-up-right:

Driver Discovery

Sling searches for ADBC driver libraries automatically in the following order:

  1. Explicit driver property in the connection configuration

  2. ADBC_DRIVER_PATH environment variable — additional directories to search (colon-separated on Unix, semicolon-separated on Windows)

  3. Standard installation paths:

Platform
Paths

macOS

~/Library/Application Support/ADBC/Drivers, ~/.dbc/drivers, /usr/local/lib, /opt/homebrew/lib

Linux

~/.local/share/ADBC/Drivers, ~/.dbc/drivers, /usr/lib, /usr/local/lib

Windows

%LOCALAPPDATA%\ADBC\Drivers, ~/.dbc/drivers, %ProgramFiles%\ADBC\lib

Sling looks for driver files named libadbc_driver_{name}.{ext} (e.g., libadbc_driver_postgresql.dylib).

If the driver is in a non-standard location, you can either set ADBC_DRIVER_PATH or specify the full path directly in your connection:

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.

  • driver (optional) -> Explicit path to the ADBC driver library file (e.g., /usr/local/lib/libadbc_driver_postgresql.dylib). If not set, Sling auto-discovers the driver.

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?