三角洲湖合并 - 多个"whenMatchedUpdate"不起作用(未引发错误)



环境:

  • Databricks 11.3 LTS(包括Apache Spark 3.3.0和Scala 2.12)--注意:还尝试了更低的版本,包括10.4、10.5和11
  • Pyspark

当使用三角洲湖进行合并时;whenMatchedUpdate";。从下面的例子中可以看出;当匹配更新"时;调用,并且此行为始终适用于第一个调用(即,将设置客户端调用,但尽管存在值,但不会设置描述)。

destDeltaTable = DeltaTable.forName(spark, "DestinationTable")
merge = (
destDeltaTable.alias("Dest")
.merge(
source_df.alias("Source"),
"""
(Source.id == Dest.id)
""",
)
.whenMatchedUpdate(condition="Dest.Client IS NULL", set={"Client": col("Source.Client")})
.whenMatchedUpdate(condition="Dest.Description IS NULL", set={"Description": col("Source.Description")})
...
...
whenNotMatchedInsertAll()
)
merge.execute()

目标是能够在我的追加销售期间使用";whenMatchedUpdate";。

示例数据:

来源(增量表)

描述有些东西
ID客户端
1ABC

这是预期行为,因为它类似于传统编程语言中的if/else:

if something:
do1
elif something2:
do2
else:
do3

您只需要在两列都为null时添加一个条件,然后更新这两列。

最新更新