Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Delta Lake MERGE 命令 允许用户使用高级条件更新增量表。 它可以使用 MERGE 命令将源表、视图或 DataFrame 中的数据更新到目标表中。 但是,当前算法未完全优化,无法处理未修改的 行。 通过低随机合并优化,未修改的行被排除在更新匹配行所需的昂贵洗牌作之外。
目前,MERGE作由两个 Join 执行完成。 第一个联接是使用整个目标表和源数据来查找目标表 触摸 文件的列表,包括任何匹配的行。 之后,它将执行第二个联接,只读取 触摸的 文件和源数据,以执行实际的表更新。 尽管第一个联接是减少第二个联接的数据量,但 触摸的 文件中,仍有大量 未修改的 行。 第一个联接查询比较轻,因为它只读取给定匹配条件中的列。 表更新的第二个列需要加载所有列,这会产生昂贵的洗牌过程。
使用低随机合并优化,Delta 会暂时保留第一个联接的匹配行结果,并将其用于第二个联接。 根据结果,它会从繁重的混排过程中排除 未修改的 行。 匹配的 行和 未修改的 行将有两个单独的写入作业,因此,与以前的行为相比,这可能会导致输出文件数的 2 倍。 但是,预期的性能提升超过了可能出现的小文件问题。
Nota
- 低随机合并可用作预览功能。
它适用于 Apache Spark 版本 3.2 和 3.3 的 Synapse 池。
- 触摸 文件中未修改的行是单独处理的,不会经历实际的 MERGE作。 它可以节省整个 MERGE 执行时间和计算资源。 当复制许多行并且仅更新几行时,增益会更大。
- 为未修改的行保留行顺序。 因此,如果文件已排序或 Z-ORDERED,则未修改行的输出文件对于跳过数据仍然有效。
- 即使合并条件与所接触文件中的所有行匹配,也会产生很小的开销。
为池或会话设置配置后,所有 Spark 写入模式都将使用该功能。
若要使用低随机合并优化,请使用以下配置启用它:
- Scala 和 PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
- Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = true
若要检查当前配置值,请使用如下所示的命令:
- Scala 和 PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
- Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled`
若要禁用该功能,请更改以下配置,如下所示:
- Scala 和 PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
- Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false