Rust SDK
Rust SDK for Spice.ai
Install
cargo add spiceai
Connect to Spice Runtime
Create a SpiceClient using default configuration:
use spiceai::ClientBuilder;
#[tokio::main]
async fn main() {
let client = ClientBuilder::new()
.build()
.await
.unwrap();
let data = client.query(
"SELECT trip_distance, total_amount FROM taxi_trips ORDER BY trip_distance DESC LIMIT 10"
).await;
}
Or pass a custom flight address:
use spiceai::ClientBuilder;
#[tokio::main]
async fn main() {
let client = ClientBuilder::new()
.flight_url("http://my_remote_spice_instance:50051")
.build()
.await
.unwrap();
let data = client.query(
"SELECT trip_distance, total_amount FROM taxi_trips ORDER BY trip_distance DESC LIMIT 10"
).await;
}
Parameterized Queries
Use query_with_params() for parameterized queries to prevent SQL injection and improve performance (v3.0.0+):
use spiceai::ClientBuilder;
use arrow::array::{Float64Array, StringArray};
use arrow::record_batch::RecordBatch;
use std::sync::Arc;
#[tokio::main]
async fn main() {
let client = ClientBuilder::new()
.build()
.await
.unwrap();
// Create parameters as a RecordBatch
let min_price = Float64Array::from(vec![10.0]);
let category = StringArray::from(vec!["electronics"]);
let params = RecordBatch::try_from_iter(vec![
("1", Arc::new(min_price) as _),
("2", Arc::new(category) as _),
]).unwrap();
let data = client.query_with_params(
"SELECT * FROM products WHERE price > $1 AND category = $2",
Some(params)
).await;
}
For more details, see Parameterized Queries.
