Did the previous proposed answer work? I've got similar issue and only seems to work with one condition not two:
import delta Factevents = delta.DeltaTable.forPath(spark, 'abfss://*******************.dfs.core.windows.net/silver/C365/events/')
( Factevents.alias('events') .merge( dfNewData.alias('New'), "events.uprn = New.uprn AND events.id = New.id" ) .whenMatchedUpdateAll() .whenNotMatchedInsertAll() .execute() )