dbt Labs BlogAI & LLMs

Columnar's Year of ADBC Drivers: Zero-Copy Promises Meet Messy Type Systems

At a dbt Summit 2026 breakout session, Matt Topol, co-founder of Columnar and a member of the Apache Arrow, Iceberg, and Magpie project management committees, shared what a year of building ADBC drivers for production taught his team.

ADBC, or Arrow Database Connectivity, is a vendor-neutral, Apache-licensed standard offering one API for many database drivers. Each driver returns data in Apache Arrow's columnar in-memory format rather than the row-oriented protocols behind ODBC and JDBC. Topol traced the problem to a 2017 paper on client protocol design: compute and vectorization got decades of optimization while row-oriented client protocols quietly became the bottleneck.

Adoption is real. dbt v2 uses ADBC as the core communication layer for its adapters, with custom hooks layered on top, and Power BI, Apache Airflow, and dltHub have adopted it too, alongside vendor drivers for Snowflake, BigQuery, Databricks, and ClickHouse. DuckDB implements the interface directly, Polars is built on Arrow natively, and Snowflake and Databricks return Arrow natively, letting ADBC skip serialization once data lands in Arrow.

The reality is messier. Postgres, Trino, and SQL Server still return JSON or other row-oriented formats, forcing driver authors to convert. Type systems cause most of the pain: SQL numeric precision varies from SQL Server's 38 digits to ClickHouse's 76, MySQL and MariaDB's 65, Postgres's 1,000-plus, and BigQuery's fixed decimal128(38,9). String handling diverges too - Oracle treats empty strings as null, Postgres rejects the UTF-8 null byte, SQLite skips UTF-8 validation, SQL Server uses UTF-16, and ClickHouse lacks a separate binary type. Snowflake stores time zone offsets per row, prompting Arrow to add an extension type, while ClickHouse always attaches a time zone. Spark's driver must support Hive/Thrift, Apache Livy, and Spark Connect, each with quirks.

Topol noted a driver must pick its Arrow type mapping before seeing any data, based only on documented limits. ADBC adds TOML driver manifests and connection profiles referenced as profile://name to simplify installation and keep credentials out of application code. Open gaps remain: a fully synchronous API, uneven type support, and clunky metadata handling. An upcoming spec revision adds multi-result-set support, non-fatal warning handlers, and application-requested types. His advice: test schemas early, pin driver versions, and know which version you run.

Source: dbt Labs Blog

← Back to News