DataFusion基于 Rust 的查询执行框架

联合创作 · 2023-10-01 00:04

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(())
}
浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报