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 表的操作性能将会缓慢下降。
注意
低随机合并会尝试保留未修改的现有数据的数据布局。 更新或新插入的数据的数据布局可能不是最佳,因此仍可能需要运行 OPTIMIZE
或 OPTIMIZE ZORDER BY 命令。
可用性
默认情况下,低随机合并在 Databricks Runtime 10.4 和更高版本中处于启用状态。 在早期支持的 Databricks Runtime 版本中,可以通过将配置 spark.databricks.delta.merge.enableLowShuffle
设置为 true
来启用它。 此标志在 Databricks Runtime 10.4 及更高版本中不起作用。