环境:
- 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 | 客户端 | 描述
---|---|
1 | ABC | 有些东西
这是预期行为,因为它类似于传统编程语言中的if/else:
if something:
do1
elif something2:
do2
else:
do3
您只需要在两列都为null时添加一个条件,然后更新这两列。