Low Shuffle Merge

注意

Databricks Runtime 9.0 及更高版本支持 Low Shuffle Merge。 它在 Databricks Runtime 10.3 及更高版本以及 Databricks Runtime 9.0、9.1、10.0、10.1 和 10.2 的公共预览版正式发布 (GA)。 建议预览版客户迁移到 Databricks Runtime 10.3 或更高版本。

MERGE 命令用于从 Delta 表执行同时更新、插入和删除。 “Low Shuffle Merge”是 MERGE 的优化实现,可显著提高常见工作负载的性能。 Low Shuffle Merge 通过以单独的、更简化的处理模式处理未修改的行,而不是将它们与修改的行一起处理,来提供更好的性能。 因此,随机数据量显著减少,从而提高性能。 Low Shuffle Merge 还减少了用户在执行 MERGE 操作后重新运行 OPTIMIZE ZORDER BY 命令的需求。

优化的性能

许多 MERGE 工作负载仅更新表中相对较少的行。 但是,Delta 表只能按每个文件进行更新。 当 MERGE 命令需要更新或删除特定文件中存储的少量行时,它还必须处理和重写存储在同一文件中的所有剩余行,即使这些行未经修改。 Low Shuffle Merge 优化未修改行的处理。 以前,它们的处理方式与已修改行相同,通过多个随机阶段和昂贵的计算传递。 在 Low Shuffle Merge 中,未修改行的处理则无需任何随机重组、昂贵的处理或增加其他开销。

优化的数据布局

除了运行速度更快,Low Shuffle Merge 还有利于后续操作。 较早的 MERGE 实现造成了未修改数据的数据布局完全更改,导致后续操作的性能较低。 Low Shuffle Merge 会尝试保留未修改记录的现有数据布局,包括按“尽力而为”的原则执行的 Z 顺序优化。 因此,使用 Low Shuffle Merge 时,在运行一个或多个 MERGE 命令后,对 Delta 表的操作性能将会缓慢下降。

注意

Low Shuffle Merge 会尝试保留未修改的现有数据的数据布局。 更新或新插入数据的数据布局可能并非最佳,因此可能仍然需要运行 OPTIMIZEOPTIMIZE ZORDER BY 命令。

可用性

默认情况下,Low Shuffle Merge 在 Databricks Runtime 10.4 及更高版本中处于启用状态。 在早期的受支持的 Databricks Runtime 版本中,可以通过将配置 spark.databricks.delta.merge.enableLowShuffle 设置为 true 来启用它。 此标志在 Databricks Runtime 10.4 及更高版本中不起作用。