What is ADBC?
ADBC — Arrow Database Connectivity — is a vendor-neutral API for moving data between databases and applications as Apache Arrow columnar batches. Like JDBC or ODBC, one API spans many databases; unlike them, ADBC speaks Arrow natively, so bulk reads and writes stream columnar data with no row-by-row serialization. The payoff: any ADBC driver can hand its results straight to any other ADBC driver, which is what makes moving a table from Oracle or Db2 into GizmoSQL a few lines of code.
Bidirectional by design
Any ADBC source can feed any ADBC target. Pull from Oracle or Db2 into GizmoSQL, or push the other way — the Arrow batches never touch disk or a dataframe.
Pure Go, pip-installable
The Oracle (TNS/TTC) and Db2 (DRDA) drivers reimplement the wire protocol from scratch in Go. No Instant Client, no CLI, no JCC — just a wheel.
Columnar the whole way
Results stream as Apache Arrow record batches, so bulk reads and writes move with minimal CPU and copying — the shape your analytics tools already want.
One API, every language
A single native core reaches Python, Go, R, Rust, C#, C/C++, and JavaScript, and plugs into DuckDB via the adbc_scanner extension.
One C API. Every language.
The examples on this page are in Python, but ADBC exposes each driver as a C-compatible shared library — so the same native core works from Go, Rust, Java, C#, C/C++, JavaScript, and more. One driver, every stack.
The driver suite
Four drivers, one Arrow interface. Start with GizmoSQL, then bridge your existing Oracle and Db2 estate.
Oracle & Db2 → GizmoSQL, in a few lines
Because every driver is Arrow-native, one driver’s reader is another driver’s bulk-ingest input. Data streams from source to target without ever landing in a dataframe or a file — and it works in both directions. GizmoSQL is one target among many: any ADBC-enabled database can be the source or the sink.
- No Oracle Instant Client, no IBM CLI/JCC — nothing to install but a wheel.
- Or do it entirely in SQL from DuckDB / GizmoSQL via the adbc_scanner or adbc extension.
- Exact types the whole way: decimals stay exact, timestamps keep their zones.
1# Move a table from Oracle (or Db2) into GizmoSQL — no client libraries,
2# no pandas, nothing materialised on the client. Just Arrow, end to end.
3import adbc_driver_oracle.dbapi as oracle
4import adbc_driver_gizmosql.dbapi as gizmosql
5
6with oracle.connect(uri=oracle_uri) as src, \
7 gizmosql.connect(gizmosql_uri, username="token", password=token) as dst:
8 with src.cursor() as s, dst.cursor() as d:
9 s.execute("SELECT * FROM sales.orders")
10 rows = d.adbc_ingest(table_name="orders",
11 data=s.fetch_record_batch(), # streamed, not buffered
12 mode="replace")
13 dst.commit()
14 print(f"Loaded {rows:,} rows")ADBC drivers — FAQ
What is ADBC?
ADBC (Arrow Database Connectivity) is a vendor-neutral API for moving data between databases and applications as Apache Arrow columnar batches. Like JDBC or ODBC, one API works across many databases — but ADBC speaks Arrow natively, so bulk reads and writes stream columnar data with no row-by-row serialization. Any ADBC driver can hand its results straight to any other ADBC driver.
Why does GizmoData build its own ADBC drivers?
Because Arrow-native drivers make data interchange trivial: a table can move from Oracle or Db2 straight into GizmoSQL without ever being materialised on the client. Our Oracle and Db2 drivers are also pure-Go reimplementations of the database wire protocols, so they install with a single pip command — no Oracle Instant Client, no IBM CLI or JCC.
Do the Oracle and Db2 drivers need vendor client libraries?
No. The Oracle driver speaks the native Oracle TNS/TTC protocol and the Db2 driver speaks IBM DRDA directly, both written from scratch in Go. There is nothing to install but the Python wheel — no Instant Client, no CLI, no JCC. They are independent reimplementations and are not affiliated with or endorsed by Oracle or IBM.
Can I use these drivers from DuckDB?
Yes. Each driver is a standard ADBC c-shared library, so DuckDB's adbc_scanner extension can ATTACH the source database, read it live with projection and filter pushdown, and write back with plain SQL (USE the attached schema, then CREATE TABLE … AS). Credentials can live in a self-contained DuckDB secret or in an ADBC connection profile — adbc_scanner supports both, as does Columnar's adbc extension. GizmoSQL embeds DuckDB, so the same works from a GizmoSQL server.
What languages can I use the drivers from?
Each driver ships a Go module and a Python wheel, and the ADBC c-shared library is callable from Python, Go, R, Rust, C#, C/C++, and JavaScript. The GizmoSQL driver adds OAuth/SSO and automatic DDL/DML detection across all of them.