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
290,667 每月下载量
在 16 个crate中使用(通过 delta_kernel)
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可以从
C
或C++
使用。有关更多信息,请参阅 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
))。
文档
- API 文档
- architecture.md 文档描述了内核架构(目前处于wip状态)
示例
有一些示例程序展示了如何使用delta-kernel-rs
与delta表交互。它们位于kernel/examples
目录下。
开发
delta-kernel-rs仍在积极开发中,但遵循大多数Rust项目的约定。
概念
有一些关键概念将有助于理解内核
Engine
特质封装了所有功能,以及引擎或连接器需要提供给Delta内核以读取Delta表的功能。DefaultEngine
是上述特质的默认实现。它位于engine/default
,并为所有Engine
功能提供了一个参考实现。DefaultEngine
使用arrow作为其内存中的数据格式。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
,则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
- 代码覆盖率通过cargo-llvm-cov在codecov上可用。请参阅他们的文档以获取本地安装/运行的说明。
依赖项
~270–720KB
~17K SLoC