使用Rust delta-rs查询Delta湖中的数据

6mzjoqzu  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(180)

如何使用Rust with Delta-rs查询DeltaLake表中的数据。在我的示例中,数据位于多个 parquet 文件中。谢谢
你能不能给予我一个小代码,是从你的身边工作?

6jjcrrmo

6jjcrrmo1#

你需要Polars或者Datafusion来完成这个任务,这里有一个简单的方法:

use deltalake::delta::open_table;
use polars::prelude::*;

#[tokio::main]
async fn main() {
    let lf = read_delta_table("delta_test_5m").await;
    println!("{:?}", lf.select([count()]).collect());

    
}

async fn read_delta_table(path: &str) -> LazyFrame {
    let dt = open_table(path).await.unwrap();
    let files = dt.get_files();
    let mut df_collection: Vec<DataFrame> = vec![];
    for file_path in files.into_iter() {
        let full_path = format!("{}/{}", path, file_path.as_ref());
        let mut file = std::fs::File::open(full_path).unwrap();
        let df = ParquetReader::new(&mut file).finish().unwrap();
        df_collection.push(df);
    }

    let empty_head = df_collection[0].clone().lazy().limit(0);
    df_collection.into_iter().fold(empty_head, |acc, df| concat([acc, df.lazy()], false, false).unwrap())
}

这段代码首先获取要考虑最新版本增量表的 parquet 文件列表,然后为每个文件创建一个Dataframe,最后将这些Dataframe连接起来得到最终的Dataframe。
请注意,Polars在Python中提供了这个开箱即用的特性:

import polars as pl

print(pl.read_delta("path_to_delta"))

我没有找到如何阅读三角洲直接通过极地在铁 rust ,但它应该很快添加,我猜。

相关问题