graphar-flight 0.1.2

Apache Arrow Flight SQL service over FalkorDB — Cypher in, Arrow out
Documentation
//! Export a Cypher query's results from FalkorDB to a GraphAr file.
//!
//! ```bash
//! cargo run -p graphar-flight --example export -- \
//!   redis://127.0.0.1:6379 mygraph \
//!   "MATCH (n:Person) RETURN n._gar_id AS id, n.name AS name" \
//!   /tmp/people.parquet
//! ```
//! The output format is taken from the file extension
//! (parquet/csv/json/orc/arrow).

use graphar::FileType;
use graphar_flight::{FalkorExecutor, export::export_cypher};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut args = std::env::args().skip(1);
    let url = args
        .next()
        .unwrap_or_else(|| "redis://127.0.0.1:6379".into());
    let graph = args.next().unwrap_or_else(|| "demo".into());
    let cypher = args
        .next()
        .unwrap_or_else(|| "MATCH (n) RETURN n._gar_id AS id LIMIT 100".into());
    let out = args.next().unwrap_or_else(|| "/tmp/export.parquet".into());

    let file_type = match out.rsplit_once('.').map(|(_, e)| e) {
        Some("parquet") => FileType::Parquet,
        Some("csv") => FileType::Csv,
        Some("json") => FileType::Json,
        Some("orc") => FileType::Orc,
        Some("arrow") => FileType::ArrowIpc,
        _ => FileType::Parquet,
    };

    let mut exec = FalkorExecutor::connect(&url, &graph).await?;
    let report = export_cypher(&mut exec, &cypher, &out, file_type).await?;
    println!(
        "exported {} rows × {} cols → {out}",
        report.rows, report.columns
    );
    Ok(())
}