根据我的分析,append将重新添加数据,即使它在表中可用,而overwrite savemode将更新现有日期(如果有),并在数据框中添加添加行。
val secondCompaniesDF = Seq((100, "comp1"), (101, "comp2"),(103,"comp2"))
.toDF("companyid","name")
secondCompaniesDF.write.mode(SaveMode.Overwrite)
.option("createTableColumnTypes","companyid int , name varchar(100)")
.jdbc(url, "Company", connectionProperties)
如果savemode是append,并且这个程序被重新执行,公司将有3行,而在覆盖的情况下,如果用任何更改或添加行重新执行,现有记录将被更新并添加新行
注意:覆盖将删除表并重新创建表。是否有任何方法可以更新现有记录并插入新记录,比如upsert。
1条答案
按热度按时间a0x5cqrl1#
对于upsert和merge,您可以使用databricks或hudi的delta lake
以下是链接
https://github.com/apache/hudi
https://docs.databricks.com/delta/delta-intro.html