共用方式為

Azure Databricks 上的低随机合并

注释

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

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

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

优化的性能

许多 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 及更高版本中不起作用。