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)
Sling downloads both automatically the first time you use an ADBC connection (v1.5.24+), so in most cases no setup is needed — just add use_adbc: true to your connection and run it:
Downloads happen once and are cached under ~/.sling/bin/:
dbc CLI
~/.sling/bin/dbc/<version>/
Driver manager
~/.sling/bin/adbc/<version>/
Database drivers
standard dbc locations (see Step 2)
Anything already installed on the system is preferred over downloading. Sling only fetches what is missing.
To disable automatic downloads (e.g. in an air-gapped environment), set SLING_DISABLE_DBC_AUTO_INSTALL=true and install the components manually using the instructions below.
The rest of this section covers manual installation, which you need only if you have disabled auto-install, are offline, or want to pin a specific build.
Step 1: Install the ADBC Driver Manager
The driver manager is a shared library that Sling loads at runtime.
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)
With auto-install, the complete setup on any platform is:
If you have disabled auto-install, install the components first:
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
%APPDATA%\adbc\drivers, %LOCALAPPDATA%\ADBC\Drivers, ~/.config/adbc/drivers, ~/.dbc/drivers, %ProgramFiles%\ADBC\lib
Automatic install — if the driver is still not found, Sling installs it with
dbc(downloadingdbcitself if needed)
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.
ADBC Environment Variables
These control how Sling locates and downloads the ADBC components. (To define a connection with an environment variable, see Environment Variable below.)
ADBC_DRIVER_MANAGER_LIB
Full path to the driver manager library. Overrides auto-detection and auto-download.
ADBC_DRIVER_PATH
Extra directories to search for database drivers (:-separated on Unix, ; on Windows).
ADBC_DRIVER_MANAGER_VERSION
Driver manager version to download. Defaults to 1.12.0.
DBC_PATH
Full path to an existing dbc binary, instead of downloading one.
DBC_VERSION
dbc version to download. Defaults to 0.3.0.
SLING_DISABLE_DBC_AUTO_INSTALL
Set to true to disable all automatic downloads.
Troubleshooting
"failed to load ADBC driver manager library"
This means the driver manager shared library could not be loaded. Sling normally downloads it automatically, so this usually indicates auto-install is disabled, the machine is offline, or the library is present but incompatible with the system (see the next two sections).
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.
Linux: "version `GLIBCXX_3.4.29' not found"
The prebuilt driver manager is built with GCC 11 and needs GLIBCXX_3.4.29. Older distributions ship an older C++ runtime — Ubuntu 20.04 and Debian 11 provide GLIBCXX_3.4.28, one version short.
Distributions from 2021 onward (Ubuntu 22.04+, Debian 12+, RHEL/Rocky 9+, Amazon Linux 2023) are unaffected and need nothing here.
Sling cannot fix this from inside a running process: the dynamic loader binds the driver manager's dependency to whichever libstdc++.so.6 is already loaded, and by then the system copy is in place. So Sling downloads a compatible library and prints the command to use it:
Fix: re-run with LD_PRELOAD as shown. To make it permanent, export it in your shell profile:
Alternatively, install a newer system libstdc++ (conda install -c conda-forge libstdcxx), or point ADBC_DRIVER_MANAGER_LIB at a build compatible with your system.
You can check what your system provides with:
Linux: "version `GLIBC_2.xx' not found"
The C runtime (glibc) itself is older than the driver manager requires. Unlike the libstdc++ case above, this cannot be worked around with a downloaded library — glibc cannot be preloaded safely.
Fix: run Sling on a newer distribution, or set ADBC_DRIVER_MANAGER_LIB to a driver manager built for your system.
"Must provide 'driver' parameter"
This means Sling could not find or install the database-specific ADBC driver (e.g., the DuckDB or PostgreSQL driver). Sling normally installs it automatically with dbc, so this usually means auto-install is disabled or the machine is offline.
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
Sling searches both %APPDATA%\adbc\drivers (Roaming, where dbc installs) and %LOCALAPPDATA%\ADBC\Drivers (Local). If your driver is somewhere else, set ADBC_DRIVER_PATH:
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
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 support@slingdata.io, on discord or open a Github Issue here.
Last updated
Was this helpful?