← All databases

Database · MySQL wire

MariaDB ColumnStore into Apache Arrow with ADBC

MariaDB ColumnStore 23.02, read and written through adbcBridge — the ADBC driver that loads the database's ODBC driver — verified on Linux, macOS arm64 and Windows x64. Everything below is the compatibility matrix's record for this row.

Status

Linux✓ pass

PASS

macOS arm64✓ pass

PASS (MariaDB ColumnStore 11.1.1) — provisioning and the user created by hand; columnstore.cnf mounted from /private/tmp

Windows x64✓ pass

PASS (MySQL (via ODBC) 11.1.1-MariaDB-log; MySQL Connector/ODBC 26.7.1 + NO_SSPS=1; provisioned per the README, with the zz-adbc.cnf copied into /mnt/skysql/columnstore-container-configuration/ because the bind-mounted copy is world-writable under Docker Desktop and ignored)

Driver and connection string

ODBC driver
MariaDB Connector/ODBC 3.1 (MariaDB wire)
Wire
MySQL wire
adbcBridge
0.1.1 (release)

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

Driver={drv};Server=127.0.0.1;Port=13313;Database=adbc;User=adbc;Password=Adbc!Bridge2026;{no_ssps}

Python

import adbcbridge

# {drv}: the ODBC driver library (path), or its name from odbcinst.ini
conn = adbcbridge.connect(uri="Driver={drv};Server=127.0.0.1;Port=13313;Database=adbc;User=adbc;Password=Adbc!Bridge2026;")
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 MariaDB ColumnStore 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

columnar engine inside MariaDB 11.1: standard-SQL ingest DDL (ColumnStore rejects maodbc's own LONG VARCHAR/BIT type names), no VARBINARY column type; needs columnstore_cache_inserts=ON (bound-parameter inserts are ~2 rows/s without it) and provision to start the backend processes; ingest 14.9k rows/s (54.6k with array binding), fetch 1.41M rows/s

Native ADBC driver, compared

MariaDB ColumnStore speaks the MySQL wire protocol, so the ADBC Driver Foundry's native MySQL ADBC driver (0.6.0) can be pointed at it too. On 2026-09-05 the same seven-step ADBC workload (connect, SELECT 1, DDL and inserts and a read, a 1,000-row adbc_ingest, table schema, catalog listing, read back) ran through both:

PathResultFirst error
Native ADBC driver✓ all seven steps
adbcBridge over ODBC✓ all seven steps

Where the native driver stops it is by design of that driver, not a defect of MariaDB ColumnStore; the full table for all 28 wire-compatible databases, with each first error, is in the note.

Read next