【发布时间】:2020-06-08 16:48:32
【问题描述】:
当行中的某些列值与源表中的相同列值匹配时,我想更新数据块中的目标 Delta 表。
问题是当我在源表中有多行与目标 Delta 表中的一行匹配时。
这是一种情况,源表中两行或多行的主键与增量表中一行的主键匹配。 我试图复制以下场景:
sql="""
MERGE INTO """ + targetTable + """ TGT USING """ + tempView + """ SRC ON TGT.id = SRC.id and TGT.category != SRC.category and TGT.startdt = SRC.startdt
WHEN MATCHED THEN DELETE"""
targetDF = spark.createDataFrame([{"id": "5001","category": "N1","startDt": "2019-09-30 00:00:00.000"}])
sourceDF = spark.createDataFrame([{"id": "5001","category": "E1","startDt": "2019-09-30 00:00:00.000"},{"id": "5001","category": "B1","startDt": "2019-09-30 00:00:00.000"}])
targetDF.write.format("delta").mode("overwrite").saveAsTable("test.targetDF")
sourceDF.createOrReplaceTempView("tempView")
sqlOut=spark.sql(sql)
display(spark.sql("select * from test.targetDelta"))
我在两个表上尝试了左连接(targetTable left join sourceTable),其中我的 id 和 startDt 匹配,以在我的 targetTable 中获取一行,我想删除但不知道该怎么做。
spark.sql("""Select TGT.id from test.targetDF TGT left join tempView SRC ON TGT.id = SRC.id and TGT.startDt= SRC.startDt""")
提前致谢。
【问题讨论】:
标签: pyspark apache-spark-sql databricks azure-databricks delta-lake