我在中使用以下简单的代码行将数据从azuredatabricks加载到sqldb
val loadsqldb = spark.sql("""SELECT * FROM TABLEA""")
// WRITE FROM CONFIG
val writeConfig = Config(Map(
"url" -> url,
"databaseName" -> databaseName,
"dbTable" -> "dbo.TABLENAME",
"user" -> user,
"password" -> password,
"connectTimeout" -> "5"
))
//~
loadsqldb.write.mode(SaveMode.Overwrite).option("truncate", true).sqlDB(writeConfig)
我们的服务器上有一个唯一的id密钥,必须保留该密钥,如下所示:
CREATE UNIQUE INDEX i__NeighbourhoodCategoryHourlyForecast_unique
ON almanac_devdb.dbo.NeighbourhoodCategoryHourlyForecast (fk_neighbourhoods, fk_categories, local_date, local_hour)
GO
当我尝试将数据加载到我们的sql数据库时,我们得到以下错误:;
Cannot insert duplicate key row in object 'dbo.TABLENAME' with unique index 'i__TABLENAME_unique'. The duplicate key value is (36983, 130000, 2020-08-12, 14).
有人建议我找到一种方法让databricks合并到一个overwrite中,但我不知道该怎么做,甚至不知道这样做是否正确?
2条答案
按热度按时间xn1cxnb41#
我建议遵循以下步骤(不要更改spark端的任何内容,而是在sql server端执行以下步骤)-
在顶部创建视图
target_table
你想在哪里写sparkDataframe数据创建而不是插入触发器,这样所有插入命令都应该通过步骤1中创建的视图
用于插入和更新singe语句的merge语句。遵循本教程。
如果键(not)匹配,您可能还需要查看本教程中与事务相关的查询,以更新或插入表
9lowa7mx2#
删除唯一索引键的重复项。
之后,尝试写入数据库。