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日

#10 in #deltalake

Download history 499/week @ 2024-06-03 1322/week @ 2024-06-10 1259/week @ 2024-06-17 1642/week @ 2024-06-24 87527/week @ 2024-07-01 82924/week @ 2024-07-08 79739/week @ 2024-07-15 81985/week @ 2024-07-22 90581/week @ 2024-07-29 72704/week @ 2024-08-05 63544/week @ 2024-08-12 61710/week @ 2024-08-19

290,667 每月下载量
16 个crate中使用(通过 delta_kernel

Apache-2.0

11KB
71

delta-kernel-rs

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

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

crate

Delta-kernel-rs分为几个不同的crate

  • kernel:实际的内核crate
  • acceptance:通过Delta接受测试验证正确性的接受测试
  • derive-macros:一个crate,我们的 derive-macros 将在其中
  • ffi:功能,使得delta-kernel-rs可以从 CC++ 使用。有关更多信息,请参阅 ffi 目录。

构建

默认情况下,我们只构建kernel和acceptance crate,这也会构建 derive-macros 作为依赖。

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

cargo test

这将构建内核,运行所有单元测试,获取Delta接受测试数据,并运行接受测试。

作为库,通常您需要通过将delta-kernel-rs添加到您的 Cargo.toml 作为依赖来依赖于它。例如

delta_kernel = "0.3"

版本和API稳定性

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

文档

示例

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

开发

delta-kernel-rs仍在积极开发中,但遵循大多数Rust项目的约定。

概念

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

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

设计原则

一些应该考虑的设计原则

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

提示

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

依赖项

~270–720KB
~17K SLoC