DataFusion基于 Rust 的查詢(xún)執(zhí)行框架
DataFusion 是一個(gè)可擴(kuò)展的查詢(xún)執(zhí)行框架,用 Rust 編寫(xiě),使用 Apache Arrow 作為其內(nèi)存格式。
DataFusion 支持用于構(gòu)建邏輯查詢(xún)計(jì)劃的 SQL 和 DataFrame API,以及能夠使用線程對(duì)分區(qū)數(shù)據(jù)源(CSV 和 Parquet)并行執(zhí)行的查詢(xún)優(yōu)化器和執(zhí)行引擎。DataFusion 還通過(guò) Ballista crate 支持分布式查詢(xún)執(zhí)行 。
特性:
- 高性能:利用 Rust 和 Arrow 的內(nèi)存模型,DataFusion 實(shí)現(xiàn)了非常高的性能
- 易于連接:作為 Apache Arrow 生態(tài)系統(tǒng)(Arrow、Parquet 和 Flight)的一部分,DataFusion 與大數(shù)據(jù)生態(tài)系統(tǒng)的其余部分配合良好
- 易于嵌入:幾乎可以在其設(shè)計(jì)的任何一點(diǎn)進(jìn)行擴(kuò)展,DataFusion 可以針對(duì)特定用例進(jìn)行定制
- 高質(zhì)量:DataFusion 本身以及與 Arrow 生態(tài)系統(tǒng)的其余部分都經(jīng)過(guò)廣泛測(cè)試,可用作生產(chǎn)系統(tǒng)的基礎(chǔ)。
示例用法
對(duì)存儲(chǔ)在 CSV 中的數(shù)據(jù)運(yùn)行 SQL 查詢(xún):
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(())
}評(píng)論
圖片
表情
