Native Go · Warp SQL · Apache-2.0

    The Hardcharger ADBC driver

    One native driver connects Python, Go, C/C++, R, Rust and other ADBC clients to Hardcharger over Warp SQL. Query, stream Arrow results and load data through the same open interface.

    $ pip install adbc-driver-hardcharger

    Arrow from query to ingest

    Read results as Arrow record batches and pass another ADBC driver’s reader directly to Hardcharger’s bulk ingest. Large results and uploads can use parallel connections.

    Sign in as yourself

    Use passwords, browser SSO, identity-provider token exchange or client-certificate sign-in. TLS is the default for hardcharger:// connections.

    One driver, many languages

    The Python wheel includes the native shared library. ADBC’s C API also connects Go, C/C++, R, Rust and other clients through a driver manager.

    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

    Install and query

    Install the Python wheel, set your server URI and credentials in the environment, then stream query results as Arrow batches. No pandas conversion is required.

    1# pip install adbc-driver-hardcharger
    2import os
    3from adbc_driver_hardcharger import dbapi as hardcharger
    4
    5with hardcharger.connect(
    6    uri=os.environ["HARDCHARGER_URI"],
    7    username=os.environ["HARDCHARGER_USERNAME"],
    8    password=os.environ["HARDCHARGER_PASSWORD"],
    9) as conn, conn.cursor() as cur:
    10    cur.execute("SELECT 42 AS answer, ? AS greeting", ["hello"])
    11    for batch in cur.fetch_record_batch():
    12        print(batch)

    HARDCHARGER_URI is hardcharger://host:31337 with TLS. Use hardcharger://localhost:31337?tls=false only for a local development server.

    Browser SSO and mTLS

    Use the identity provider configured on your server, or sign in with a client certificate. These features are included in Hardcharger; your administrator must enable the corresponding server configuration.

    1from adbc_driver_hardcharger import dbapi as hardcharger
    2
    3# Browser SSO: the server must have an identity provider configured.
    4with hardcharger.connect(uri="hardcharger://db.example.com", auth_type="external") as conn:
    5    print(conn.current_user())
    6
    7# Client-certificate sign-in: the server must enable mTLS sign-in.
    8with hardcharger.connect(
    9    uri="hardcharger://db.example.com",
    10    auth_type="client_certificate",
    11    tls_root_certs="ca.pem",
    12    tls_client_cert="client.pem",
    13    tls_client_key="client-key.pem",
    14) as conn:
    15    print(conn.current_user())
    Read the driver documentation →

    Stream data into Hardcharger

    Bulk ingest accepts an Arrow reader, so batches can be produced and consumed incrementally. This example creates a new table; use mode="append" to load an existing compatible table.

    1# pip install adbc-driver-hardcharger pyarrow
    2import os
    3import pyarrow as pa
    4from adbc_driver_hardcharger import dbapi as hardcharger
    5
    6schema = pa.schema([("id", pa.int64()), ("amount", pa.float64())])
    7
    8def batches():
    9    for start in range(0, 4000, 1000):
    10        yield pa.record_batch(
    11            [pa.array(range(start, start + 1000), type=pa.int64()),
    12             pa.array([12.50] * 1000, type=pa.float64())],
    13            schema=schema,
    14        )
    15
    16with hardcharger.connect(
    17    uri=os.environ["HARDCHARGER_URI"],
    18    username=os.environ["HARDCHARGER_USERNAME"],
    19    password=os.environ["HARDCHARGER_PASSWORD"],
    20) as conn, conn.cursor() as cur:
    21    with pa.RecordBatchReader.from_batches(schema, batches()) as reader:
    22        rows = cur.adbc_ingest(table_name="orders", data=reader, mode="create")
    23    print(f"Loaded {rows:,} rows")

    Streaming from another database works the same way: pass the source cursor’s fetch_record_batch() reader as data. Keep the source cursor open while Hardcharger consumes it.

    More Hardcharger integrations →

    Hardcharger ADBC driver — FAQ

    Is the Hardcharger driver free?

    Yes. The driver and the Hardcharger server are open source under Apache-2.0. Every server feature is included, with no edition fee.

    Does this replace the GizmoSQL ADBC driver?

    Use adbc-driver-hardcharger for Hardcharger over Warp SQL. Keep adbc-driver-gizmosql for existing GizmoSQL servers over Arrow Flight SQL. The drivers share the ADBC interface, but use different wire protocols.

    How do I stream data from Oracle, Db2 or Quack?

    Open the source and Hardcharger connections, execute a source query, and pass fetch_record_batch() to the destination cursor’s adbc_ingest(). Keep both connections open until ingestion finishes. The driver pages include complete examples.

    How do TLS and browser sign-in work?

    hardcharger://host:31337 uses TLS by default. Add ?tls=false only for local development. For browser SSO, connect with auth_type="external" to a server configured with an identity provider. Client-certificate sign-in requires the server’s mTLS sign-in configuration.

    Ready to move your data?

    Install Hardcharger for free and use ADBC drivers to stream your first table.

    Schedule a demo!powered by Calendly