我正在使用spark从Terradata表中读取数据,并希望在Oracle中 Upsert 表。我可以插入数据但是可以执行UPSERT吗?
这就是我将数据插入Oracle的方式。
dataframe.write.mode(SaveMode.Append).jdbc(url,table6,props)
答案 0 :(得分:0)
从Spark 2.2开始,Spark中没有upsert。
所以,实现它的方法可以是:
迭代数据并找出使用foreach,foreachpartition
您可以通过在数据集上使用writeStream并覆盖ForeachWriter中的open(),close()和process()方法以插入/更新消息,以并行方式完成此操作。
< / LI> 醇>希望这有帮助!
答案 1 :(得分:0)
我已安排spark作业每天运行一次,并使用dataframe.write.mode(SaveMode。覆盖)覆盖表.jdbc(url,table,props)。因此,每次spark作业运行时,它都将从Teradata表中获取所有数据并覆盖Oracle中的表。