Apache Arrow ekosystém
jOpenSpace 2026
Tomáš Karela Procházka
Data a SQL
• jistota IT světa: SQL
• ODBC (1992), JDBC (1997), Python DB-API (1999), JavaScript: ¯\_(ツ)_/¯
Connection c = DriverManager.getConnection("jdbc:...");
ResultSet rs = c.createStatement().executeQuery("SELECT ...");
Analytické databáze
• 2004 MapReduce → Hadoop → Hive (SQL nad MapReduce)
• 2005 Vertica, 2010 Dremel/BigQuery, 2012 Redshift, 2014 Snowflake
• ukládají po sloupcích: čte se jen potřebné, komprese, CPU cache, SIMD
Ven to leze po řádcích
• BigQuery, Snowflake → JSON
• Redshift → Postgres wire protokol
• klienti přitom chtějí sloupce: pandas, Polars, ML
2016: ClickHouse a Apache Arrow
• ClickHouse – sloupcová DB, nativní protokol posílá sloupce i po síti
• Apache Arrow – specifikace layoutu v paměti pro sloupcová data
– stejné bajty v C++, Javě, Pythonu, Rustu, … i po síti
– předání bez serializace – bajty se jen zkopírují, nic se nepřevádí
– v jednom procesu nebo přes mmap dokonce bez kopírování (zero-copy)
– Parquet = na disk, Arrow = v paměti
Bez Arrow
S Arrow
Arrow adopce
• klienti: Polars (2020), pandas 2.0 (2023)
• databáze: Snowflake (2019), BigQuery Storage Read API (2020) vrací Arrow
Každý dodavatel má vlastní nestandardní API.
Standardy jsou po řádcích
while (rs.next()) { rs.getLong("id"); ... } // JDBC
row = cursor.fetchone() # Python DB-API
Dvojí transpozice + JSON = pálíme CPU
ADBC – Arrow Database Connectivity
• „JDBC / ODBC, ale pro Arrow“ (Apache Arrow, 2023)
• ovladače: PostgreSQL, MySQL, ClickHouse, Snowflake, BigQuery, DuckDB, …
• ovladač = jedna sdílená knihovna (.so) pro všechny jazyky; Java přes JNI
cur.execute("SELECT ...")
table = cur.fetch_arrow_table() # → Polars / pandas
$ databow --driver duckdb # SQL shell nad libovolným ADBC ovladačem
Stejná cesta přes ADBC
• Postgres: řádky z wire protokolu rovnou do Arrow, bez objektů v jazyce
Žádná transpozice navíc.
Kolik to stojí: DuckDB, ODBC vs ADBC
TPC-H lineitem, 6 mil. řádků, Apple M1 Max
ODBC 28,149 s
ADBC 0,724 s → 38× rychlejší
• DuckDB běží v procesu → žádná síť, čistě CPU čas
• přes síť: BigQuery, 6 mil. řádků – nejrychlejší ODBC ~2,7× pomalejší
Slíbil jsem AI
• stejné dotazy, stejná data, stejná ušetřená sekunda
• u agenta je čekání na data většina času
Flight SQL
• standardní wire protokol nad gRPC, Arrow i po síti (2022, pozdě, ale přece)
• DB s Flight SQL → hned má ovladače: ADBC, JDBC, ODBC
Shrnutí
Řádkové rozhraní nad sloupci = CPU cykly spálené na transpozici tam a zpátky.