--- warning: DO NOT CHANGE THIS MANUALLY, THIS IS GENERATED BY https://github.com/duckdb/community-extensions repository, check README there title: adbc excerpt: | DuckDB Community Extensions Connects DuckDB to any database that has an Arrow Database Connectivity (ADBC) driver. extension: name: adbc description: Connects DuckDB to any database that has an Arrow Database Connectivity (ADBC) driver. version: '0.0.2' language: C++ build: cmake license: Apache-2.0 maintainers: - SamArch27, columnar-tech repo: github: columnar-tech/duckdb-adbc-client andium: c30888194e57d78017cbde379abb117e82538fe6 variegata: d4b19a7b3d291464eb54b2d50e185466234225d9 ref: b1b13c05d7354ce83342c9bae242d25152144ec6 docs: hello_world: | -- Install and load the ADBC extension INSTALL adbc FROM community; LOAD adbc; -- Read from an ADBC database (SQLite) with read_adbc given an ADBC connection profile URI and a SQL query D SELECT * FROM read_adbc('profile://mydb', 'SELECT * FROM games'); ┌───────┬────────────┬─────────────────────┬─────────┬─────────┬─────────────┬─────────────┬────────────┐ │ id │ name │ inventor │ year │ min_age │ min_players │ max_players │ list_price │ │ int64 │ varchar │ varchar │ varchar │ int64 │ int64 │ int64 │ varchar │ ├───────┼────────────┼─────────────────────┼─────────┼─────────┼─────────────┼─────────────┼────────────┤ │ 1 │ Monopoly │ Elizabeth Magie │ 1903 │ 8 │ 2 │ 6 │ 19.99 │ │ 2 │ Scrabble │ Alfred Mosher Butts │ 1938 │ 8 │ 2 │ 4 │ 17.99 │ │ 3 │ Clue │ Anthony E. Pratt │ 1944 │ 8 │ 2 │ 6 │ 9.99 │ │ 4 │ Candy Land │ Eleanor Abbott │ 1948 │ 3 │ 2 │ 4 │ 7.99 │ │ 5 │ Risk │ Albert Lamorisse │ 1957 │ 10 │ 2 │ 5 │ 29.99 │ └───────┴────────────┴─────────────────────┴─────────┴─────────┴─────────────┴─────────────┴────────────┘ -- Create a table function macro to avoid retyping the connection profile URI each time D CREATE MACRO read_mydb(query) AS TABLE SELECT * FROM read_adbc('profile://mydb', query); -- Create a persistent connection to the ADBC database via ATTACH D ATTACH 'profile://mydb' AS mydb (TYPE adbc); -- Alternatively, ATTACH with a custom delimiter (i.e., SELECT * FROM [schema].[table] for SQL Server) D ATTACH 'profile://mydb' AS otherdb (TYPE adbc, DELIMITER '[]'); -- Set the default schema D USE mydb.main; -- Display all tables in the attached ADBC database D SHOW ALL TABLES; ┌──────────┬─────────┬─────────┬───────────────────────────────┬────────────────────────────────┬───────────┐ │ database │ schema │ name │ column_names │ column_types │ temporary │ │ varchar │ varchar │ varchar │ varchar[] │ varchar[] │ boolean │ ├──────────┼─────────┼─────────┼───────────────────────────────┼────────────────────────────────┼───────────┤ │ mydb │ main │ games │ [id, name, inventor, year, │ [BIGINT, VARCHAR, VARCHAR, │ false │ │ │ │ │ min_age, min_players, │ VARCHAR, BIGINT, BIGINT, │ │ │ │ │ │ max_players, list_price] │ BIGINT, VARCHAR] │ │ └──────────┴─────────┴─────────┴───────────────────────────────┴────────────────────────────────┴───────────┘ -- Read directly from the attached ADBC table (no predicate pushdown, use read_adbc for that) D SELECT * FROM games; ┌───────┬────────────┬─────────────────────┬─────────┬─────────┬─────────────┬─────────────┬────────────┐ │ id │ name │ inventor │ year │ min_age │ min_players │ max_players │ list_price │ │ int64 │ varchar │ varchar │ varchar │ int64 │ int64 │ int64 │ varchar │ ├───────┼────────────┼─────────────────────┼─────────┼─────────┼─────────────┼─────────────┼────────────┤ │ 1 │ Monopoly │ Elizabeth Magie │ 1903 │ 8 │ 2 │ 6 │ 19.99 │ │ 2 │ Scrabble │ Alfred Mosher Butts │ 1938 │ 8 │ 2 │ 4 │ 17.99 │ │ 3 │ Clue │ Anthony E. Pratt │ 1944 │ 8 │ 2 │ 6 │ 9.99 │ │ 4 │ Candy Land │ Eleanor Abbott │ 1948 │ 3 │ 2 │ 4 │ 7.99 │ │ 5 │ Risk │ Albert Lamorisse │ 1957 │ 10 │ 2 │ 5 │ 29.99 │ └───────┴────────────┴─────────────────────┴─────────┴─────────┴─────────────┴─────────────┴────────────┘ -- Insert into the ADBC database D INSERT INTO games (SELECT 6, 'Battleship', 'Clifford Von Wickler', 1931, 7, 2, 2, 12.99); D SELECT * FROM games; ┌───────┬────────────┬──────────────────────┬─────────┬─────────┬─────────────┬─────────────┬────────────┐ │ id │ name │ inventor │ year │ min_age │ min_players │ max_players │ list_price │ │ int64 │ varchar │ varchar │ varchar │ int64 │ int64 │ int64 │ varchar │ ├───────┼────────────┼──────────────────────┼─────────┼─────────┼─────────────┼─────────────┼────────────┤ │ 1 │ Monopoly │ Elizabeth Magie │ 1903 │ 8 │ 2 │ 6 │ 19.99 │ │ 2 │ Scrabble │ Alfred Mosher Butts │ 1938 │ 8 │ 2 │ 4 │ 17.99 │ │ 3 │ Clue │ Anthony E. Pratt │ 1944 │ 8 │ 2 │ 6 │ 9.99 │ │ 4 │ Candy Land │ Eleanor Abbott │ 1948 │ 3 │ 2 │ 4 │ 7.99 │ │ 5 │ Risk │ Albert Lamorisse │ 1957 │ 10 │ 2 │ 5 │ 29.99 │ │ 6 │ Battleship │ Clifford Von Wickler │ 1931 │ 7 │ 2 │ 2 │ 12.99 │ └───────┴────────────┴──────────────────────┴─────────┴─────────┴─────────────┴─────────────┴────────────┘ -- Create a local table in DuckDB of the inventors of each game D CREATE TABLE memory.inventors AS (SELECT id, inventor FROM games); -- Create a new table in the attached ADBC database (SQLite) of the inventors D CREATE TABLE game_inventors(id, inventor) AS (SELECT * FROM memory.inventors); D SELECT * FROM game_inventors; ┌───────┬──────────────────────┐ │ id │ inventor │ │ int64 │ varchar │ ├───────┼──────────────────────┤ │ 1 │ Elizabeth Magie │ │ 2 │ Alfred Mosher Butts │ │ 3 │ Anthony E. Pratt │ │ 4 │ Eleanor Abbott │ │ 5 │ Albert Lamorisse │ │ 6 │ Clifford Von Wickler │ └───────┴──────────────────────┘ -- Execute arbitrary DDL via adbc_execute D CALL adbc_execute('profile://mydb', 'DROP TABLE games'); ┌─────────┐ │ Success │ │ boolean │ ├─────────┤ │ true │ └─────────┘ -- Clear local metadata cache after remote schema changes D CALL adbc_clear_cache(); extended_description: | Use DuckDB (v1.4.5+ or v1.5.4+) to query Snowflake, Databricks, BigQuery, PostgreSQL, MySQL, or any other system with an ADBC driver. ADBC (Arrow Database Connectivity) is a universal data-access API built on Apache Arrow, an efficient, columnar data format that almost every data system supports natively. By building on Arrow, ADBC enables: 1. **Lightning-fast (zero-copy) data transfer** between column-oriented analytical databases, bypassing the slow column-to-row and row-to-column conversions typical of legacy row-based APIs like ODBC or JDBC. 2. **Seamless interoperability** with a large and growing ecosystem of Arrow-compatible systems. # Key Capabilities * Supports catalog lookups, `SELECT`, `INSERT`, `COPY`, and `CREATE TABLE AS` (`CTAS`) statements directly on attached databases. * Supports custom delimiters with `ATTACH` (e.g., `DELIMITER '[]'`) to support systems with different table/schema delimiters. * Supports built-in connection pooling for each attached database (tunable with `adbc_connection_pool_size`) * Support streaming bulk ingest for `INSERT`, `COPY`, and CTAS statements, keeping memory usage low even for data sets that exceed main memory (tunable with `adbc_insert_buffer_size`). # Known Limitations * Operates exclusively in **Autocommit Mode**. * Predicate pushdowns are not automatically performed for attached tables; use direct `read_adbc()` queries to push predicates to remote ADBC databases. * Concurrent ADBC operations within a single process are not supported. Mixing ADBC reads and writes in the same SQL statement is also restricted by default unless explicitly permitted via `adbc_mix_reads_writes`. For more information see the [documentation](https://github.com/columnar-tech/duckdb-adbc-client). extension_star_count: 50 extension_star_count_pretty: 50 extension_download_count: 22097 extension_download_count_pretty: 22.1k image: '/images/community_extensions/social_preview/preview_community_extension_adbc.png' layout: community_extension_doc --- ### Compatibility Matrix This table covers all DuckDB releases that have not reached [end-of-life](https://duckdb.org/release_calendar), including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.
| Platform | 1.4.4 | 1.4.5 | 1.5.5 | 1.5.6 | 2.0.0 | | :--- | :---: | :---: | :---: | :---: | :---: | | Linux AMD64 | ❌ | ✅ | ✅ | ✅ | ✅ | | Linux ARM64 | ❌ | ✅ | ✅ | ✅ | ✅ | | macOS AMD64 | ❌ | ✅ | ✅ | ✅ | ✅ | | macOS ARM64 | ❌ | ✅ | ✅ | ✅ | ✅ | | Windows AMD64 | ❌ | ✅ | ✅ | ✅ | ✅ | | Windows ARM64 | ❌ | ❌ | ❌ | ❌ | ❌ | | WebAssembly | ❌ | ✅ | ✅ | ✅ | ✅ | ### Installing and Loading ```sql INSTALL {{ page.extension.name }} FROM community; LOAD {{ page.extension.name }}; ``` {% if page.docs.hello_world %} ### Example ```sql {{ page.docs.hello_world }}``` {% endif %} {% if page.docs.extended_description %} ### About {{ page.extension.name }} {{ page.docs.extended_description }} {% endif %} ### Added Functions | function_name | function_type | description | comment | examples | |------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------|---------|---------------------------------------------------------------------| | adbc_clear_cache | table | Clears DuckDB's locally cached metadata for attached ADBC databases. Forces catalog and schema information to be fetched from the ADBC database. | NULL | [CALL adbc_clear_cache();] | | adbc_execute | table | Executes an SQL statement (e.g. DROP TABLE, CREATE INDEX) against a remote ADBC database. | NULL | [CALL adbc_execute('profile://mydb', 'DROP TABLE games');] | | read_adbc | table | Executes a SQL query against a remote database via an ADBC connection profile URI and returns the result as a DuckDB table. | NULL | [SELECT * FROM read_adbc('profile://mydb', 'SELECT * FROM games');] | ### Overloaded Functions This extension does not add any function overloads. ### Added Types This extension does not add any types. ### Added Settings | name | description | input_type | scope | aliases | typed_value | |------------------------------|----------------------------------------------------------------------------------------------------------------------------|------------|--------|---------|-------------| | adbc_connection_pool_size | The number of connections (default 50) to pool (cache) before the catalog creates ephemeral connections to serve requests. | BIGINT | GLOBAL | [] | 50 | | adbc_insert_buffer_size | The number of chunks (default 1000) to buffer in memory before inserting via ADBC. | BIGINT | GLOBAL | [] | 1000 | | adbc_materialize_insert_rows | Whether input rows for INSERTs are materialized before inserting via ADBC. | BOOLEAN | GLOBAL | [] | false | | adbc_mix_reads_writes | Whether ADBC reads and writes can be mixed within the same SQL statement (default false). | BOOLEAN | GLOBAL | [] | false | | temp_directory | Set the directory to which temporary files are written. | VARCHAR | GLOBAL | [] | post.db.tmp |