#delta #query-engine #table #interop #kernel #read #read-write

delta_kernel

提供 Delta/Deltalake 实现的核心库,专注于与各种查询引擎的互操作性

5 个版本 (3 个破坏性更新)

0.3.0 2024年8月7日
0.2.0 2024年7月17日
0.1.1 2024年6月11日
0.1.0 2024年6月3日
0.0.1 2024年4月5日

#329 in 解析器实现

Download history 496/week @ 2024-06-03 1327/week @ 2024-06-10 1262/week @ 2024-06-17 1639/week @ 2024-06-24 87538/week @ 2024-07-01 82972/week @ 2024-07-08 79735/week @ 2024-07-15 81984/week @ 2024-07-22 90625/week @ 2024-07-29 72739/week @ 2024-08-05 61337/week @ 2024-08-12

每月309,559 次下载
15 仓库中使用(直接使用 2 个)

Apache-2.0

440KB
9K SLoC

delta-kernel-rs

Delta-kernel-rs 是一个实验性的 Delta 实现,专注于与各种查询引擎的互操作性。它目前只支持读取。

Delta Kernel 项目是一个 Rust 和 C 库,用于构建可以读取(很快也将写入)Delta 表的 Delta 连接器,而无需了解 Delta 协议细节。这是 Java Delta Kernel 的 Rust/C 等价物。

Delta-kernel-rs 分成几个不同的库

  • kernel: 实际的核心内核库
  • acceptance: 通过 Delta Acceptance Tests 验证正确性的验收测试
  • derive-macros: 用于存放我们的 derive-macros 的库
  • ffi: 使 delta-kernel-rs 能够从 CC++ 使用的功能。有关更多信息,请参阅 ffi 目录。

构建

默认情况下,我们只构建 kernelacceptance 库,这也会构建作为依赖的 derive-macros

要开始,请通过 rustup 安装 Rust,克隆仓库,然后运行

cargo test

这将构建内核,运行所有单元测试,获取 Delta Acceptance Tests 数据,并对其运行验收测试。

作为库,通常您会希望将 delta-kernel-rs 添加到您的 Cargo.toml 中作为依赖项。例如

delta_kernel = "0.3"

版本和 API 稳定性

我们打算遵循语义化版本控制。然而,在0.x行中,API仍然是不稳定的。因此,我们可能在次要版本(即0.1 -> 0.2)中打破API,但我们将不在补丁版本(即0.1.0 -> 0.1.1)中打破API。

文档

示例

有一些示例程序展示了如何使用delta-kernel-rs与delta表交互。它们位于/kernel/examples目录中。

开发

delta-kernel-rs仍在积极开发中,但遵循大多数Rust项目采用的习惯。

概念

有一些关键概念有助于理解内核

  1. Engine特质封装了所有功能和引擎或连接器需要提供给Delta内核以读取Delta表的功能。
  2. DefaultEngine是我们上述特质的默认实现。它位于/engine/default,为所有Engine功能提供参考实现。DefaultEngine使用arrow作为其内存数据格式。
  3. Scan是从表中读取数据的入口点。

设计原则

一些应考虑的设计原则

  • 异步操作应仅存在于Engine实现中。核心内核完全不使用异步。我们不希望强加一个完整的异步运行时给引擎或连接器。DefaultEngine确实大量使用异步。但它不依赖于特定的运行时,实现可以提供基于tokio、smol、async-std或所需任何内容的“执行器”。目前只提供了一个基于tokio的执行器。
  • 最小的Table API。内核有意通过快照API公开表的不可变版本的概念。这鼓励用户更准确地思考Delta表的状态。
  • 优先使用构建器风格API而不是面向对象的API。
  • 启用了一组“简单”的默认功能,以提供基本功能,同时尽可能地减少依赖。
  • API约定以明确哪些操作涉及I/O,例如在方法签名中检索类型词。

提示

  • 在开发时,rust-analyzer是你的朋友。使用rustup component add rust-analyzer
  • 如果使用emacs,eglot和lsp-mode都提供了与rust-analyzer的优秀集成。rustic也是一个不错的选择。
  • 在vscode中开发时,有时在.vscode/settings.json中配置rust-analyzer会非常方便。
{
  "editor.formatOnSave": true,
  "rust-analyzer.cargo.features": ["default-engine", "acceptance"]
}
  • 可以使用以下命令轻松查看crate的文档:cargo docs --open
  • 代码覆盖率可通过codecov提供,使用cargo-llvm-cov。有关本地安装/运行的说明,请参阅他们的文档。

依赖项

~5–24MB
~399K SLoC