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(())
}评论
