Announcing the DuckDB ADBC Extension
Announcing the DuckDB ADBC Extension
By Sam Arch
July 8, 2026
TL;DR
The ADBC extension connects DuckDB to Snowflake, Databricks, BigQuery, PostgreSQL, MySQL, and any other system with an ADBC driver. Built on Apache Arrow, it enables fast data transfer to and from column-oriented databases, and interoperability across the growing Arrow ecosystem.
Install and load it in DuckDB by running INSTALL adbc FROM community; and then LOAD adbc;.
The Missing Link Between DuckDB and External Databases
DuckDB has surged in popularity thanks to its ease of use, speed, and feature richness. But not all of the world’s data lives in DuckDB, and eventually DuckDB needs to talk to the outside world. To connect DuckDB to other systems, the DuckDB community has developed vendor-specific extensions for individual systems such as SQLite, PostgreSQL, and Snowflake.
Although these vendor-specific extensions address a real need, each one adds another interface, feature set, and collection of quirks for DuckDB users to learn. More importantly, DuckDB lacks dedicated extensions for many widely used systems such as Databricks, Redshift, and Oracle, because building and maintaining a separate extension for every system outpaces what the DuckDB community can sustain.
Enter ADBC
ADBC (Arrow Database Connectivity) is a universal data access API that supports 30+ query systems, including:
Transactional databases: PostgreSQL, MySQL, MariaDB, SQLite, Oracle Database, Microsoft SQL Server, CockroachDB, YugabyteDB, TiDB
Analytical databases: DuckDB, ClickHouse, Exasol
Data warehouses: Snowflake, Databricks, BigQuery, Amazon Redshift, Teradata
Lakehouse engines: Trino, Dremio, StarRocks, Apache Doris
Time-series databases: InfluxDB, TimescaleDB, GreptimeDB
ADBC is built on Apache Arrow, an efficient, columnar data format that nearly every modern data system speaks natively. Building on Arrow, ADBC enables:
Fast, zero-copy data transfer between column-oriented analytical databases, skipping the slow column-to-row and row-to-column conversions that legacy row-based APIs like ODBC and JDBC force on you.
Seamless interoperability across the large and growing ecosystem of Arrow-compatible systems.
The ADBC Extension for DuckDB
DuckDB is no stranger to ADBC. It already supports other systems connecting to it through ADBC: the DuckDB shared library doubles as an ADBC driver (which you can install with dbc install duckdb), and there’s a separate ADBC driver for Quack, DuckDB’s client-server protocol (dbc install --pre quack). Those sit alongside the many other ways DuckDB already speaks Apache Arrow.
Today, we’re announcing the ADBC extension for DuckDB, which turns the connection around: instead of other systems reaching into DuckDB, DuckDB reaches out to the entire ADBC ecosystem.
Using this new extension, you can query ADBC databases directly with read_adbc, or ATTACH to an ADBC database and run SELECT, INSERT, COPY, and CTAS statements as if it were local to DuckDB.
Rusty Conover deserves credit as the first to connect DuckDB out to the ADBC ecosystem, with his adbc_scanner extension. We took a different approach that integrates more easily with ADBC connection profiles, offers broader database compatibility, and adds automatic connection pooling, automatic metadata caching, and memory-efficient INSERT and CTAS statements through streaming bulk ingest.
We plan to contribute this open source extension to the Arrow project so it can become an official ADBC library.
What the ADBC Extension Can Do
Before we can demonstrate the extension, we need to set up a database to connect to and an ADBC driver that connects to it.
Install an ADBC Driver and Create a Connection Profile
To showcase the extension, we use a SQLite games database that you can download at this link or in your terminal by running:
curl -o games.sqlite "https://data.columnar.tech/games.sqlite"<br>To connect to a new system, you install its ADBC driver. We built dbc to make that as easy as a single dbc install command. If you don’t already have dbc, install it, then run:
dbc install sqlite<br>Next, create an ADBC connection profile: a simple TOML file that stores the connection information for a database. A profile named mydb.toml that connects to the SQLite games database looks like this:
profile_version = 1<br>driver = "sqlite"
[Options]<br>uri = "./games.sqlite"<br>You can create this file yourself, or click here to download it.
The last step is to move mydb.toml into the default directory for ADBC connection profiles on your system.
# Linux<br>mv mydb.toml ~/.config/adbc/profiles/
# macOS<br>mv mydb.toml ~/Library/Application Support/ADBC/Profiles/
# Windows<br>move "mydb.toml" "%LOCALAPPDATA%\ADBC\Profiles\"<br>You can also do this in your file manager (Finder, Explorer, and so on) by moving mydb.toml into the path shown above for your OS.
With the profile in place, you’re ready to install and load the ADBC extension and start using it...