Delta Lake 3.0.0
作者:Carly Akerly
我们很高兴宣布 Delta Lake 3.0 (发行说明) 在 Apache Spark 3.5 上发布,新功能使其更易于使用并实现 Delta Lake 的标准化。
此版本包含数百项改进和错误修复,但我们想重点介绍以下几点:
- Delta UniForm:扩展了与所有引擎的兼容性,
- Delta Kernel:使构建和维护 Delta 连接器更简单,
- 更快的 DML 语句
Delta Lake 3.0 标志着一项共同承诺,即使 Delta Lake 在不同格式之间实现互操作,更易于使用,并具有更高的性能。
– 吉姆·泽姆林,Linux 基金会执行董事
Delta Lake 3.0 有哪些新功能?
自 Delta Lake 2.0 以来,Delta Lake 一直在快速引入新功能。这篇博客将回顾其中一些对性能和互操作性产生影响的功能。
Delta 通用格式 (Delta UniForm)
与 Delta Lake 类似,Apache Iceberg 和 Apache Hudi 也在 Parquet 数据之上包含元数据。在 Delta UniForm 发布之前,跨表格式操作的主要方式是复制和/或转换元数据。虽然这种方法可行,但它有一个显著的缺点,即对 Parquet 数据或其中一种湖仓格式的每次更改都需要触发更新的转换。
Delta UniForm 自动为 Iceberg 和 Delta Lake 生成元数据,针对其共享底层 Parquet 数据的单一副本。Delta UniForm 为所有读取器提供了数据的实时视图,无需额外的数据复制或转换。
要设置 Delta UniForm 表,您只需设置表属性
CREATE TABLE main.default.table_name (msg STRING)
TBLPROPERTIES('delta.universalFormat.enabledFormats' = 'iceberg');
一旦表被启用为 Delta UniForm 表,任何表修改都会触发 Iceberg 元数据的异步生成。然后,任何 Iceberg 读取器都可以无需进一步修改地使用数据,前提是客户端是根据开源 Iceberg 规范编写的。还支持 Hive Metastore。
Delta Kernel
Delta Lake 连接器生态系统在过去几年中取得了显著增长。该项目的受欢迎和成功值得庆祝,但我们也认识到这给开发人员带来了一些挑战:连接器之间性能和正确性的可变性,以及采用新协议功能所需的时间更长。
Delta Kernel 在 Data+AI Summit 2023 上推出,它将 Delta Lake 协议细节抽象为简单的核心库 API。这种简化意味着开发人员可以使用稳定的 API 调用构建连接器,而 Kernel 应用特定于协议的逻辑来返回正确的行数据。
有关如何在独立 Java 程序或分布式处理连接器中使用 Kernel 的更多信息,请参阅用户指南。
MERGE、UPDATE 和 DELETE 性能增强
合并
MERGE
命令的增强功能已整合到 Delta Lake PR 1827 中。主要的改进包括:
- 仅限
MATCHED
合并的数据跳过 - 增强的仅限
INSERT
合并处理 - 高效的行更改写入
- 高效的指标计数器
您可以通过阅读 Merge — Delta Lake documentation、观看 YouTube 上的 技术讲座 | 深入了解 Delta Lake 第 3 部分:DELETE、UPDATE 和 MERGE 如何工作 视频,或查阅我们之前的博客 Delta Lake Merge 来了解更多关于使用 MERGE
的信息。
更新
UPDATE
命令现在支持写入 删除向量 (DVs)。这将使 Delta 表上的 UPDATE
操作(尤其是点更新)的速度提高多达 10 倍。有关更多详细信息,请参阅 Delta Lake PR 1942。
目前此功能必须手动启用
SET spark.databricks.delta.update.deletionVectors.persistent = 'true;
UPDATE table_name SET id = -1 WHERE id % 2 = 0;
删除
FILE_PATH
规范化逻辑的改进减少了表中每一行昂贵的 Path.toUri.toString
调用。相反,现在对规范化路径进行了缓存,这使得在启用删除向量时,DELETE
命令的性能提高了 2 倍或更多。
Delta Lake 3.0 中的其他功能
- 一种新的检查点格式 (v2) 解决了 v1 检查点格式的许多现有可靠性问题和限制,并为未来的更多优化打开了大门。有关更多详细信息,请参阅 Delta Lake PR 1793。
- 支持在 Apache Spark 3.5 上将 Iceberg 表零拷贝转换为 Delta 表。CONVERT TO DELTA 在相同位置生成 Delta 表,无需重写 Parquet 文件。
- 日志压缩文件已添加到 Delta 协议规范中,这可能会减少 Delta 检查点的频率。Delta Spark 中添加了对日志压缩文件的读取支持。
此版本包含更多功能。请参阅发行说明以获取完整列表。
致谢
感谢所有参与 Delta Lake 3.0 发布的人员
Adam Binford, Ahir Reddy, Ala Luszczak, Alex, Allen Reese, Allison Portis, Ami Oka, Andreas Chatzistergiou, Animesh Kashyap, Anonymous, Antoine Amend, Bart Samwel, Bo Gao, Boyang Jerry Peng, Burak Yavuz, CabbageCollector, Carmen Kwan, ChengJi-db, Christopher Watford, Christos Stavrakakis, Costas Zarifis, Denny Lee, Desmond Cheong, Dhruv Arya, Eric Maynard, Eric Ogren, Felipe Pessoto, Feng Zhu, Fredrik Klauss, Gengliang Wang, Gerhard Brueckl, Gopi Krishna Madabhushi, Grzegorz Kołakowski, Hang Jia, Hao Jiang, Herivelton Andreassa, Herman van Hovell, Jacek Laskowski, Jackie Zhang, Jiaan Geng, Jiaheng Tang, Jiawei Bao, Jing Wang, Johan Lasperas, Jonas Irgens Kylling, Jungtaek Lim, Junyong Lee, K.I. (Dennis) Jung, Kam Cheung Ting, Krzysztof Chmielewski, Lars Kroll, Lin Ma, Lin Zhou, Luca Menichetti, Lukas Rupprecht, Martin Grund, Min Yang, Ming DAI, Mohamed Zait, Neil Ramaswamy, Ole Sasse, Olivier NOUGUIER, Pablo Flores, Paddy Xu, Patrick Pichler, Paweł Kubit, Prakhar Jain, Pulkit Singhal, RunyaoChen, Ryan Johnson, Sabir Akhadov, Satya Valluri, Scott Sandre, Shixiong Zhu, Siying Dong, Son, Tathagata Das, Terry Kim, Tom van Bussel, Venki Korukanti, Wenchen Fan, Xinyi, Yann Byron, Yaohua Zhao, Yijia Cui, Yuhong Chen, Yuming Wang, Yuya Ebihara, Zhen Li, aokolnychyi, gurunath, jintao shen, maryannxue, noelo, panbingkun, windpiger, wwang-talend, sherlockbeard
我们还要特别感谢 Scott Sandre 的贡献。
一如既往,衷心感谢我们开源社区的贡献。
今天就加入社区吧!
我们始终很高兴能与我们现有的贡献者社区合作,并欢迎新成员。如果您有兴趣帮助 Delta Lake 项目,请通过我们的任何论坛加入我们的社区,包括 GitHub、Slack、X、LinkedIn、YouTube 和 Google Groups。