Arrow-native · Pure Go · pip install

    ADBC drivers that move data anywhere

    One Arrow-native API across GizmoSQL, Oracle, IBM Db2, and DuckDB Quack. Stream a table from Oracle or Db2 straight into GizmoSQL — no vendor client libraries, no dataframes, no ODBC. Just pip install.

    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.

    PythonGoRustJavaC#C / C++JavaScriptRRubyKotlin
    Learn more about Apache Arrow ADBC

    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.

    Bring your data to GizmoSQL

    Install GizmoSQL Core for free, then pip-install a driver and stream your first table.