The Linux Foundation Projects
Delta Lake

Delta Lake 性能

作者:Joe Harris

本文解释了 Delta Lake 为何能成为适用于不同查询引擎的高性能数据存储系统。

本文还介绍了 Delta Lake 随着时间推移所做的更改,以帮助其更快地执行数据操作。

Delta Lake 3.0 中的 MERGE 改进

本节回顾了 Delta Lake 3.0 中 MERGE 性能的改进。这些更改将 MERGE 操作的执行速度提高了高达 56%。我们将探讨这些增强功能,并展示它们所提供的显著性能提升。

我们早前的文章 揭秘 Delta Lake 中的 MERGE 强调了 MERGE 命令的强大功能和多功能性。

MERGE 是您可以使用 Delta Lake 执行的最强大的操作。通过 MERGE,您可以在单个事务中应用所有三种标准数据操作语言操作(INSERT、UPDATE 和 DELETE)。您还可以为每个操作添加多个条件,以应对更复杂的场景和数据集。

MERGE 命令的最新增强功能已集成到 Delta Lake PR 1827 中。主要改进包括:

  • 仅匹配合并的数据跳过
  • 仅插入合并的增强处理
  • 高效的行更改写入
  • 高效的指标计数器

仅匹配合并的数据跳过

现在,当 MERGE 语句仅包含 MATCHED 子句时,我们采用数据跳过。这通过使用仅目标 MATCHED 条件进行数据跳过,加速了匹配的搜索。例如,在以下查询中,谓词 target.value = 5 OR target.value = 7 可以排除对已知不包含这些值的任何文件的冗余扫描。

仅插入合并的增强处理

在 Delta Lake 3.0 中,仅插入的 MERGE 语句支持任意数量的 NOT MATCHED 子句,而以前只允许单个 NOT MATCHED 子句。这一改进允许将不同的 MERGE … INSERT 操作合并为更少的步骤,从而提高整体效率。如果 MATCHED 子句没有任何匹配项,我们现在也会切换到仅插入的 MERGE

高效的行更改写入

我们改进了行更改写入过程以提高效率。我们不再单独处理各个分区,而是构建一个包含所有要写入行的单个数据帧,使用一个全面的表达式将正确的 MERGE 操作应用于每一行。

高效的指标计数器

MERGE/UPDATE/DELETE 操作期间更新指标时,我们用专用的原生表达式替换了以前使用的 UDF。此更改优化了代码生成,从而实现了一种更高效、更精简的指标递增方法。

MERGE 性能基准测试

我们创建了一个新的小型基准测试来测试 MERGE 的改进。MERGE 效率的提高意味着整体操作现在更快。以下是按语句类型进行的摘要:

  • DELETE 提高 27%
  • INSERT(包含多个 NOT MATCHED 子句)提高 35%
  • INSERT(包含单个 NOT MATCHED 子句)保持不变
  • UPSERT(结合 INSERTUPDATE)提高 56%。

新的 MERGE 基准已添加到 delta-io / benchmarks 中的现有基准中,您可以轻松地自行运行测试以查看影响。

总结

在 Delta Lake 3.0 中,我们将 MERGE 语句的性能提高了高达 56%,为您的 Lakehouse 数据管道提供了速度提升。我们发现性能改进是多项提高 MERGE 效率的更改的综合效应。

您可以通过阅读 Merge — Delta Lake 文档、观看 YouTube 上的 技术讲座 | 深入了解 Delta Lake 第三部分:DELETE、UPDATE 和 MERGE 的工作原理 视频,或查阅我们早前的博客 Delta Lake Merge 来了解更多关于使用 MERGE 的信息。