Azure Databricks 上的低随机合并

注意

低随机合并在 Databricks Runtime 10.4 LTS 及更高版本以及 Databricks Runtime 9.1 LTS 公共预览版正式发布 (GA)。 Databricks 建议预览版客户迁移到 Databricks Runtime 10.4 LTS 或更高版本。

MERGE 命令用于执行 Delta Lake 表中的同步更新、插入和删除。 Azure Databricks 对 MERGE 进行了优化的实现,通过减少随机操作的数量,显著提高常见工作负荷的性能。

Databricks 低随机合并通过以单独的、更简化的处理模式处理未修改的行,而不是将它们与修改的行一起处理,来提供更好的性能。 因此,随机数据量会显著减少,从而提高性能。 低随机合并还减少了用户在执行 MERGE 操作后重新运行 OPTIMIZE ZORDER BY 命令的需要。

优化的性能

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

优化的数据布局

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

注意

低随机合并会尝试保留未修改的现有数据的数据布局。 更新或新插入的数据的数据布局可能不是最佳,因此仍可能需要运行 OPTIMIZEOPTIMIZE ZORDER BY 命令。

可用性

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