DataFusion基于 Rust 的查询执行框架
DataFusion 是一个可扩展的查询执行框架,用 Rust 编写,使用 Apache Arrow 作为其内存格式。
DataFusion 支持用于构建逻辑查询计划的 SQL 和 DataFrame API,以及能够使用线程对分区数据源(CSV 和 Parquet)并行执行的查询优化器和执行引擎。DataFusion 还通过 Ballista crate 支持分布式查询执行 。
特性:
- 高性能:利用 Rust 和 Arrow 的内存模型,DataFusion 实现了非常高的性能
- 易于连接:作为 Apache Arrow 生态系统(Arrow、Parquet 和 Flight)的一部分,DataFusion 与大数据生态系统的其余部分配合良好
- 易于嵌入:几乎可以在其设计的任何一点进行扩展,DataFusion 可以针对特定用例进行定制
- 高质量:DataFusion 本身以及与 Arrow 生态系统的其余部分都经过广泛测试,可用作生产系统的基础。
示例用法
对存储在 CSV 中的数据运行 SQL 查询:
use datafusion::prelude::*; use datafusion::arrow::util::pretty::print_batches; use datafusion::arrow::record_batch::RecordBatch; #[tokio::main] async fn main() -> datafusion::error::Result<()> { // register the table let mut ctx = ExecutionContext::new(); ctx.register_csv("example", "tests/example.csv", CsvReadOptions::new())?; // create a plan to run a SQL query let df = ctx.sql("SELECT a, MIN(b) FROM example GROUP BY a LIMIT 100")?; // execute and print results df.show().await?; Ok(()) }
评论