delta-io/delta
An open-source storage framework that enables building a Lakehouse architecture with compute engines including Spark, PrestoDB, Flink, Trino, and Hive and APIs
它是什么
Delta Lake 是一个开源存储框架,允许您构建 Lakehouse 架构——一种结合了数据湖的低成本存储和数据仓库的可靠性与事务特性的系统。它与 Apache Spark、PrestoDB、Flink、Trino 和 Hive 等流行的数据处理引擎协同工作,并为 Scala、Java、Rust、Ruby 和 Python 提供 API。
此仓库(delta-io/delta)是核心项目,但它是 delta.io 组织下更大的 Delta Lake 仓库家族(如 delta-rs、delta-sharing 和 kafka-delta-ingest)的一部分。
关键能力
- ACID 事务 — Delta Lake 确保并发读写是 可序列化 的(即结果如同操作按某种顺序一次一个地发生)。这是通过记录每次更改的 事务日志 实现的。
- 多个连接器 — README 强调了与以下工具的集成:
- Apache Spark(读写)
- Apache Flink(写入,预览)
- PrestoDB(读取)
- Trino(读写)
- Delta Standalone(用于 Scala/Java 项目的单节点 Java 库,包括 Flink、Hive、Beam 和 PrestoDB)
- Apache Hive(读取)
- Delta Rust API(用于 Rust 的低级访问,带有 Python 和 Ruby 绑定)
工作原理(事务协议)
Delta Lake 的保证来自 Delta 事务日志协议(在 PROTOCOL.md 文件中指定)。该协议定义了表元数据如何存储在事务日志中,并赋予格式事务行为。Delta Standalone 库实现了此协议,使非 Spark 工具能够读写 Delta 表。
兼容性
- API 兼容性:文档化的公共 API(Scala、Java、Python)是稳定的。基于 Spark 的 API(如
spark.read和df.write)在主要版本(例如 1.x.x)内保持稳定。内部类可能会更改。 - 数据存储兼容性:较新版本的 Delta Lake 始终可以读取由较旧版本写入的表(向后兼容)。但是,较旧版本可能无法读取由较新版本写入的表(不保证向前兼容)——当事务协议中添加新功能时会发生这种情况,通过递增最小读取器/写入器版本来指示。
底层存储的要求
Delta Lake 的 ACID 保证依赖于存储系统提供三件事:
- 原子可见性 — 文件要么完全可见,要么完全不可见。
- 互斥 — 只有一个写入者可以在其最终目的地创建或重命名文件。
- 一致的列表 — 一旦文件被写入,所有未来的目录列表必须包含它。
构建和开发
- 该项目使用 SBT(Scala 构建工具)编译。
- 构建需要 Java 17 或更高版本(使用
java -version检查)。 - 常用命令:
build/sbt compile、build/sbt package、build/sbt test。 - 对于 Python 测试,README 描述了设置 Conda 环境(该特定构建路径需要 JDK 11)并运行
python/run-tests.py。 - 对于 IntelliJ 开发,README 推荐 JDK 11,并提供详细的设置步骤(包括生成解析器文件的故障排除)。
社区和许可证
- 许可证:Apache License 2.0。
- 社区渠道:Slack(在 go.delta.io/slack 注册)、LinkedIn、YouTube 和公共邮件列表。
- 欢迎贡献,项目遵循行为准则。
下一步
README 指向 Delta Lake 文档 以获取完整详细信息,快速入门指南 适用于 Scala/Java/Python,以及 路线图 以了解未来计划。
相关
- 项目
- 项目
- 项目
- 项目