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
(结合INSERT
和UPDATE
)提高 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
的信息。