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
Using ADBC requires two components:
ADBC Driver Manager — a shared library (
libadbc_driver_manager.so/.dylib/.dll) that loads and manages driversDatabase Driver — the native ADBC driver for your specific database (e.g., DuckDB, PostgreSQL)
Step 1: Install the ADBC Driver Manager
The driver manager is a shared library that Sling loads at runtime. You must install it before using any ADBC connection.
Using Conda (recommended):
Or with Homebrew + Conda:
The library is installed to your conda environment's lib/ directory (e.g., ~/mambaforge/lib/libadbc_driver_manager.dylib). Sling auto-detects common conda paths.
The Apache Arrow apt repository provides pre-built packages for amd64 (x86_64):
The libadbc-driver-manager apt package is only available for amd64. For arm64/aarch64, use conda-forge (see below).
Conda-forge provides packages for both amd64 and arm64:
The library is installed to your conda environment's lib/ directory. Sling auto-detects common conda paths (~/mambaforge/lib/, ~/miniforge3/lib/, ~/miniconda3/lib/).
Using Conda:
If Sling cannot find the library, set the ADBC_DRIVER_MANAGER_LIB environment variable to the full path of adbc_driver_manager.dll.
Sling auto-detects the driver manager from common installation paths. If it cannot find the library, you can set the ADBC_DRIVER_MANAGER_LIB environment variable to the full path:
Step 2: Install the Database Driver
Install the native ADBC driver for your target database using the dbc CLI tool:
Then install drivers for your target databases:
Drivers are installed to:
macOS:
~/Library/Application Support/ADBC/Drivers/Linux:
~/.config/adbc/drivers/Windows:
%APPDATA%\adbc\drivers\
Sling auto-discovers installed drivers from these locations.
Quick Start Example (DuckDB)
Here is a complete example from scratch on macOS:
And on Linux (amd64):
Manual Driver Installation
If you prefer not to use dbc, you can install ADBC driver libraries manually:
Driver Discovery
Sling searches for ADBC driver libraries automatically in the following order:
Explicit
driverproperty in the connection configurationADBC_DRIVER_PATHenvironment variable — additional directories to search (colon-separated on Unix, semicolon-separated on Windows)Standard installation paths:
macOS
~/Library/Application Support/ADBC/Drivers, ~/.dbc/drivers, /usr/local/lib, /opt/homebrew/lib
Linux
~/.local/share/ADBC/Drivers, ~/.config/adbc/drivers, ~/.dbc/drivers, /usr/lib, /usr/local/lib
Windows
%LOCALAPPDATA%\ADBC\Drivers, ~/.dbc/drivers, %ProgramFiles%\ADBC\lib
Sling looks for driver files matching *{driver_name}* (e.g., libduckdb.so, 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 (trueorfalse). Default isfalse.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.
Troubleshooting
"failed to load ADBC driver manager library"
This means the driver manager shared library is not installed or cannot be found.
Fix: Install the driver manager (see Step 1 above), or set the ADBC_DRIVER_MANAGER_LIB environment variable to the full path of the library.
"Must provide 'driver' parameter"
This means Sling cannot find the database-specific ADBC driver (e.g., the DuckDB or PostgreSQL driver).
Fix: Install the driver with dbc install <driver_name>, or set ADBC_DRIVER_PATH to the directory containing the driver, or set the driver property in your connection config.
Windows: driver not found after dbc install
On Windows, dbc installs drivers to %APPDATA%\adbc\drivers\ (Roaming), but Sling may search %LOCALAPPDATA% (Local). Set ADBC_DRIVER_PATH to the correct directory:
Or specify the driver path directly in your connection:
Database-Specific Examples
PostgreSQL with ADBC
ADBC URI format: postgresql://user:password@host:port/database
Official Documentation: Apache ADBC PostgreSQL Driver
MySQL with ADBC
ADBC URI format: user@tcp(host:port)/database
Official Documentation: Apache ADBC MySQL Driver
SQL Server with ADBC
ADBC URI format: mssql://user:password@host:port/database
Official Documentation: Apache ADBC SQL Server Driver
Snowflake with ADBC
ADBC URI format: snowflake://user:password@account/database/schema
Official Documentation: Apache ADBC Snowflake Driver
DuckDB with ADBC
ADBC URI format: duckdb:///path/to/file.db or duckdb://:memory:
Official Documentation: Apache ADBC DuckDB Driver
SQLite with ADBC
ADBC URI format: sqlite:///path/to/file.db
Official Documentation: Apache ADBC SQLite Driver
BigQuery with ADBC
ADBC URI format: bigquery://project
Official Documentation: Apache ADBC BigQuery Driver
Trino with ADBC
ADBC URI format: http://user@host:port?catalog=catalog&schema=schema
Official Documentation: Apache ADBC Trino Driver
Using sling conns
sling connsHere 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], on discord or open a Github Issue here.
Last updated
Was this helpful?