delta - 一个开源存储框架,可以使用包括 Spark、PrestoDB、Flink、Trino 和 Hive 在内的计算引擎以及适用于 Scala、Java、Rust、Ruby 和 Python 的 API 构建 Lakehouse 架构。

Created at: 2019-04-23 02:56:51
Language: Scala
License: Apache-2.0

三角洲湖标志

测试 许可证 皮皮

Delta Lake是一个开源存储框架,可以使用包括Spark,PrestoDB,Flink,Trino和Hive在内的计算引擎以及Scala,Java,Rust,Ruby和Python的API构建Lakehouse架构

以下是一些比较流行的Delta Lake集成,请参阅 delta.io/integrations 以获取完整列表:

  • Apache Spark™:此连接器允许Apache Spark™读取和写入Delta Lake。
  • Apache Flink (Preview):此连接器允许Apache Flink写入Delta Lake。
  • PrestoDB:此连接器允许PrestoDB从Delta Lake读取。
  • Trino:此连接器允许Trino读取和写入Delta Lake。
  • Delta Standalone:这个库允许Scala和基于Java的项目(包括Apache Flink,Apache Hive,Apache Beam和PrestoDB)读取和写入Delta Lake。
  • Apache Hive:此连接器允许Apache Hive从Delta Lake读取。
  • Delta Rust API:这个库允许Rust(使用Python和Ruby绑定)对Delta表进行低级访问,并且旨在与数据处理框架一起使用,如datafusion,ballista,rust-dataframe,vega等。

目录

最新二进制文件

有关最新版本,请参阅联机文档

接口文档

兼容性

增量独立库是一个单节点 Java 库,可用于读取和写入增量表。具体来说,该库提供 API 与事务日志中的表元数据进行交互,实现增量事务日志协议,实现增量湖格式的事务保证。

接口兼容性

Delta Lake 项目提供了两种类型的 API。

  • Direct Java/Scala/Python API - API 文档中记录的类和方法被视为稳定的公共 API。可以在代码中直接访问的所有其他类、接口和方法都被视为内部类、接口和方法,并且它们可能会在各个版本中发生更改。
  • 基于 Spark 的 API - 你可以通过 / (即 、 和 ) 读取增量表。这些 API 的选项将在 Delta Lake 的主要版本(例如 1.x.x)中保持稳定。
    DataFrameReader
    Writer
    spark.read
    df.write
    spark.readStream
    df.writeStream
  • 有关版本及其与 Apache Spark 版本的兼容性,请参阅联机文档

数据存储兼容性

Delta Lake保证了所有Delta Lake表的向后兼容性(即,较新版本的Delta Lake将始终能够读取由旧版本的Delta Lake编写的表)。但是,我们保留在事务协议引入新功能时中断前向兼容性的权利(即,旧版本的Delta Lake可能无法读取较新版本生成的表)。

协议中的重大更改通过增加操作中的最小读取器/写入器版本来指示。

Protocol

路线图

交易协议

增量事务日志协议文档提供了事务协议的规范。

底层存储系统的要求

Delta Lake ACID 保证基于存储系统的原子性和持久性保证。具体而言,我们要求存储系统提供以下信息。

  1. 原子可见性:必须有一种方法可以使文件完整可见或根本不可见。
  2. 相互排除:只有一个编写器必须能够在最终目标创建(或重命名)文件。
  3. 一致列表:将文件写入目录后,该目录的所有未来列表都必须返回该文件。

有关详细信息,请参阅有关存储配置的联机文档

并发控制

Delta Lake 可确保并发读取和写入的可序列化性。有关更多详细信息,请参阅三角洲湖并发控制

报告问题

我们使用 GitHub 问题来跟踪社区报告的问题。你也可以联系社区以获取答案。

贡献

我们欢迎对三角洲湖的贡献。有关更多详细信息,请参阅我们的 CONTRIBUTING.md

我们还遵守三角洲湖泊行为准则

建筑

Delta Lake是使用SBT编译的

要编译,请运行

build/sbt compile

要生成工件,请运行

build/sbt package

要执行测试,请运行

build/sbt test

要执行单个测试套件,请运行

build/sbt 'testOnly org.apache.spark.sql.delta.optimize.OptimizeCompactionSuite'

要在单个测试套件中执行单个测试和单个测试套件,请运行

build/sbt 'testOnly *.OptimizeCompactionSuite -- -z "optimize command: on partitioned table - all partitions"'

有关更多命令,请参阅 SBT 文档

IntelliJ Setup

IntelliJ 是开发 Delta Lake 时推荐使用的 IDE。要将三角洲湖作为新项目导入:

  1. 例如,将三角洲湖克隆到 .
    ~/delta
  2. 在 IntelliJ 中,选择“> >”,然后选择 。
    File
    New Project
    Project from Existing Sources...
    ~/delta
  3. 在“选择”下。点击。
    Import project from external model
    sbt
    Next
  4. 在指定有效的 Java JDK 并选择对 和 使用 SBT shell 下。
    Project JDK
    1.8
    project reload
    builds
  5. 点击。
    Finish

设置验证

等待 IntelliJ 编制索引后,通过在 IntelliJ 中运行测试套件来验证你的设置。

  1. 搜索并打开
    DeltaLogSuite
  2. 在类声明旁边,右键单击两个绿色箭头,然后选择
    Run 'DeltaLogSuite'

故障 排除

如果你看到表单的错误

Error:(46, 28) object DeltaSqlBaseParser is not a member of package io.delta.sql.parser
import io.delta.sql.parser.DeltaSqlBaseParser._
...
Error:(91, 22) not found: type DeltaSqlBaseParser
    val parser = new DeltaSqlBaseParser(tokenStream)

然后按照以下步骤操作:

  1. 使用 SBT CLI 进行编译:。
    build/sbt compile
  2. 转到> > > 。
    File
    Project Structure...
    Modules
    delta-core
  3. 在右侧面板下删除任何文件夹,例如
    Source Folders
    target
    target/scala-2.12/src_managed/main [generated]
  4. 单击并重新启动测试。
    Apply

许可证

Apache License 2.0,请参阅 LICENSE

社区

三角洲湖社区内有两种沟通媒介。