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

优化的性能

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

优化的数据布局

低随机合并的运行速度更快,并且有利于后续操作。 先前 MERGE 的实现完全更改了未修改的数据的数据布局,降低了后续操作的性能。 低洗牌合并会尽可能保留未修改记录的现有数据布局,包括 液体聚类分析 布局。运行一个或多个 MERGE 命令后,性能下降的速度会变得更慢。

注释

低随机合并会尝试保留未修改的现有数据的数据布局。 更新或新插入的数据的数据布局可能不是最佳,因此可能需要 OPTIMIZE 在启用了液体聚类分析的表上运行。

可用性

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

旧版 Z 排序

对于使用 Z 排序的表,低随机合并还会尽量尝试在未修改的数据上保留现有的 Z 顺序布局。 更新或新插入的数据布局可能不是最佳的,因此在执行操作后,仍可能需要运行MERGE。 Databricks 建议对所有新表使用 液体聚类分析