在pyspark中实现MERGE INTO sql



如何实现有问题的(pyspark(sql MERGE INTO语句。我有两个表,我使用createOrReplaceTempView选项将表放入临时视图中。然后,我尝试对这两个临时视图使用MERGEINTO语句。但它正在失败。原因可能是SPARK SQL不支持MERGE。有人能告诉我们如何在pyspark中以编程方式实现一个简单的MERGE INTO SQL等效语句(如下所示(吗。

MERGE INTO events
USING updates
ON events.eventId = updates.eventId
WHEN MATCHED THEN
UPDATE SET
events.data = updates.data
WHEN NOT MATCHED
THEN INSERT (date, eventId, data) VALUES (date, eventId, data)

Merge不直接支持,但如果我们可以覆盖完整的表,那么您可以遵循这种方法。

hiveContext.sql("select * from events").registerTempTable("temp_events")
hiveContext.sql("select * from updates").registerTempTable("temp_updates")
hiveContext("""
select
case when b.eventId is null then a.date else b.date as date,
case when b.eventId is null then a.eventId else b.eventId end as eventId,
case when b.eventId is null then a.data else b.data as data
from
temp_events a
full outer join
temp_updates b
on a.eventId=b.eventId
""").registerTempTable("FinalData")
hiveContext.sql("INSERT OVERWRITE TABLE table_name select * from FinalData")

使用这种情况,我们确保如果数据在新的集合中可用,那么我们将采用这些值,否则我们将采用旧的值。

请检查此解决方案是否适用于您。

谢谢,Manu

最新更新