我们在Spark + Scala代码中有一个Delta合并案例,如下所示:
deltaTable.as("existing")
.merge(dfNewData.as("new"), "new.SerialNumber = existing.SerialNumber and new.RSid = existing.RSid")
.whenMatched()
.update(Map("Id1" -> col("new.Id1"),... => around 20 columns
))
.whenNotMatched()
.insertAll()
.execute()
字符串
为了提高性能,我想检查分区修剪(https://kb.databricks.com/delta/delta-merge-into)
在上面的代码中,SerialNumber字段被过滤成块,设置了Min和Max值(使用Int变量SerialMin和SerialMax)。
deltaTable.as("existing")
.merge(dfNewData.as("new"), "existing.SerialNumber >= lit(SerialMin) and existing.SerialNumber < lit(SerialMax) and and new.SerialNumber = existing.SerialNumber and new.RSid = existing.RSid")
.whenMatched()
.update(Map("Id1" -> col("new.Id1"),... => around 20 columns
))
.whenNotMatched()
.insertAll()
.execute()
型
但是上面的代码抛出了一个错误,说这是不支持的。我们是否可以在delta merge调用中使用变量?
1条答案
按热度按时间falq053o1#
使用下面的代码解决问题:
字符串