【问题标题】:how to insert/update data in sql database using azure databricks notebook jdbc如何使用 azure databricks notebook jdbc 在 sql 数据库中插入/更新数据
【发布时间】:2021-06-23 08:32:53
【问题描述】:

我从 AZ Databricks Notebook 获得了很多用于在 sql 中附加/覆盖表的示例。但是没有单一的方法可以直接更新、使用查询或其他方式插入数据。

例如。我想更新(标识列)ID = 1143 的所有行,所以我需要注意的步骤是

val srMaster = "(SELECT ID, userid,statusid,bloburl,changedby FROM SRMaster WHERE ID = 1143) srMaster"
val srMasterTable = spark.read.jdbc(url=jdbcUrl, table=srMaster, 
   properties=connectionProperties)
srMasterTable.createOrReplaceTempView("srMasterTable")
val srMasterTableUpdated = spark.sql("SELECT userid,statusid,bloburl,140 AS changedby FROM srMasterTable")
    
import org.apache.spark.sql.SaveMode
srMasterTableUpdated.write.mode(SaveMode.Overwrite)
  .jdbc(jdbcUrl, "[dbo].[SRMaster]", connectionProperties)

有没有其他足够的方法来达到同样的效果。

注意:上面的代码也不能像SQLServerException: Could not drop object 'dbo.SRMaster' because it is referenced by a FOREIGN KEY constraint. 那样工作,所以它看起来像删除表并重新创建......根本不是解决方案。

【问题讨论】:

  • 当列 (ID) 与您的值 (1143) 匹配时,您希望将新数据插入表中还是从另一个表中复制数据?
  • 嗨,我认为这个链接(datathirst.net/blog/2018/10/12/…)会有所帮助。

标签: sql-update azure-sql-database sql-insert azure-databricks


【解决方案1】:

您可以通过 FROM 语句使用插入。

示例:更新此表中与列匹配的另一个表中的值。

INSERT INTO srMaster
     FROM srMasterTable SELECT userid,statusid,bloburl,140 WHERE ID = 1143;

向现有列值之一匹配的行插入新值

UPDATE srMaster SET userid = 1, statusid = 2, bloburl = 'https://url', changedby ='user' WHERE ID = '1143'

只需插入多个值

INSERT INTO srMaster VALUES
    (1, 10, 'https://url1','user1'),
    (2, 11, 'https://url2','user2');

在 SQL Server 中,如果表被 FOREIGN KEY 约束引用,则不能删除该表。您必须在删除父表之前删除子表,或者删除外键约束。

对于父表,您可以使用以下查询来获取外键约束名称和引用表名称:

   SELECT name AS 'Foreign Key Constraint Name', 
           OBJECT_SCHEMA_NAME(parent_object_id) + '.' + OBJECT_NAME(parent_object_id) AS 'Child Table'
   FROM sys.foreign_keys 
   WHERE OBJECT_SCHEMA_NAME(referenced_object_id) = 'dbo' AND 
              OBJECT_NAME(referenced_object_id) = 'PARENT_TABLE'

然后您可以使用以下语句更改子表并按其名称删除约束:

 ALTER TABLE dbo.childtable DROP CONSTRAINT FK_NAME;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多