cargo add exarrow-rs
cargo add tokio --features rt-multi-thread,macrosuse exarrow_rs::adbc::Driver;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let driver = Driver::new();
let database = driver.open("exasol://user:pwd@localhost:8563/my_schema")?;
// The URI schema (/my_schema) is applied server-side automatically during connect().
// No manual set_schema() call is needed.
let mut connection = database.connect().await?;
let results = connection.query("SELECT * FROM customers").await?;
for batch in results {
println!("Got {} rows", batch.num_rows());
}
connection.close().await?;
Ok(())
}exarrow-rs uses the native TCP protocol by default — Exasol's binary wire protocol with direct Arrow conversion and no intermediate JSON serialization. No extra configuration is needed.
The WebSocket transport is available as an opt-in alternative for compatibility or testing:
[dependencies]
exarrow-rs = { version = "0.11", features = ["websocket"] }let db = driver.open("exasol://user:pwd@host:8563?transport=websocket")?;See Transport Protocol in the docs for feature flags and build options.
See docs/ for comprehensive documentation:
- Setup & Connect - Docker setup, connection strings, parameters, TLS, and transport selection
- Queries - Query execution and transactions
- Prepared Statements - Parameter binding
- Import / Export - Bulk data transfer
- Type Mapping - Exasol to Arrow conversions
- Driver Manager - ADBC integration (Python, Polars, Go, Java)
Community-supported. Licensed under MIT.
Build with Rust 🦀 and made with ❤️
Based on a prototype by marconae, now maintained by Exasol Labs 🧪.