← All databases

Database · native ODBC

Kinetica into Apache Arrow with ADBC

Kinetica 7.1.9 (Developer Edition), read and written through adbcBridge — the ADBC driver that loads the database's ODBC driver — read-only on Linux. Everything below is the compatibility matrix's record for this row.

Status

Linux✓ read

PASS (read)

macOS arm64platform

driver unavailable: the server image ships Linux and Windows ODBC clients only (/opt/gpudb/downloads)

Windows x64note

FAIL on this tree — the Windows driver (KineticaODBC.dll 7.1.9.16, windows-odbc-client.zip from the server image, registered as Kinetica ODBC 7.1) exports the W entry points but transcodes W statement text through the ANSI code page inside itself: the literal 'héllo 🚀' lands as cp1252 bytes and every later read of that row fails HY000 (50311) "Error converting invalid input with source encoding UTF-8 using ICU", identical through pyodbc; its narrow statement path hands UTF-8 through byte for byte and its wide fetch is correct (its narrow fetch is not, so the Ignite treatment does not fit). With narrow_sql set in the Kinetica quirk block on Windows the entry passes — Kinetica (via ODBC) 7.1.9.33, fetch 450–480k rows/s — a proposed bridge fix, not yet in this tree. Any Windows host also needs enable_worker_http_servers = false in the server's gpudb.conf: the driver's multi-head inserter dials the container-internal worker URLs the server advertises

Driver and connection string

ODBC driver
Kinetica ODBC 7.1.9.16 (libKineticaODBC.so, Simba Engine SDK 10.1.6, REST/SQL on 9191)
Wire
native ODBC
adbcBridge
0.1.1 (release)

The connection string the matrix used, as the connection strings reference records it (Databases with their own native protocol and ODBC driver); {drv} is the driver library or its name from odbcinst.ini, and the host, port and credentials are the test server's.

Driver={drv};URL=http://127.0.0.1:29191;UID=admin;PWD=admin;

Python

import adbcbridge

# {drv}: the ODBC driver library (path), or its name from odbcinst.ini
conn = adbcbridge.connect(uri="Driver={drv};URL=http://127.0.0.1:29191;UID=admin;PWD=admin;")
with conn.cursor() as cur:
    cur.execute("SELECT * FROM my_table")
    table = cur.fetch_arrow_table()      # pyarrow.Table

Polars and pandas

import polars as pl, pandas as pd

df = pl.read_database("SELECT * FROM my_table", connection=conn)   # Polars, Arrow-native
pdf = pd.read_sql("SELECT * FROM my_table", conn)                   # pandas 2.2+, ADBC connection

pip install adbcbridge brings the driver library; the Kinetica ODBC driver is installed the way its vendor documents, then named in Driver=. Rust, Go, C# and Java use the same connection string through their ADBC driver managers — see the docs.

What the matrix recorded

a vectorized analytic database with a first-party driver — and the driver has the sharpest parameter bug in this matrix.

What this stack needed

MeasuredFetch 579k rows/s (pyodbc 383k)

Read next