当前位置: 首页 > 知识库问答 >
问题:

将数据从spark dataframe插入SQL server中的表

虞祯
2023-03-14

我在数据库上使用Scala笔记本。我需要执行一个INSERT的数据从一个数据帧到一个表SQL服务器。如果数据已经存在,则不需要修改或插入只插入不存在的数据。

我尝试了这里指定的方法https://docs.databricks.com/spark/latest/data-sources/sql-databases.html#write-然而,它们并没有解决我的用例。保存模式。Append创建重复的数据项SaveMode。覆盖将替换现有数据(表),即SaveMode。如果表已经存在,“忽略”不会添加任何新数据。

df.write.mode(SaveMode.jdbc(url=dbUrl, table=table_name, dbConnectionProperties)

如何仅对数据库执行新数据的INSERT?

提前感谢您的帮助!

共有3个答案

南宫建白
2023-03-14

为了避免引入整个集合来进行比较,可以在SQL表上放置一个唯一的索引,并使用忽略重复项的选项。

MS文档:创建唯一索引

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
    ON <object> ( column [ ASC | DESC ] [ ,...n ] )
    [ INCLUDE ( column_name [ ,...n ] ) ]
    [ WHERE <filter_predicate> ]
    [ WITH ( <relational_index_option> [ ,...n ] ) ]
    [ ON { partition_scheme_name ( column_name )
         | filegroup_name
         | default
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

[ ; ]

<object> ::=
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }

<relational_index_option> ::=
{
  | IGNORE_DUP_KEY = { ON | OFF }
}
壤驷麒
2023-03-14

注意:-这是一个解决办法。这不是一个全面的解决方案。

可以有解决此问题的变通方法。您需要在SQL服务器表中维护一个自动增量键/主键。源数据也应该在插入前的数据中有这个键。

可能出现以下情况:

New Primary key == Old Primary key -> job will fail with constraints exception.
New Primary key != Old Primary key -> insert successfully.

插入表失败可以在程序级别处理。

欧阳意蕴
2023-03-14

假设当前数据帧为df1。

您应该将SQL表中的现有数据读入另一个数据帧(df2)。然后使用减法(或减法键):http://spark.apache.org/docs/latest/api/python/pyspark.html?highlight=subtract

val dfFinal = df1.subtract(df2)

dfFinal将包含要插入的剩余记录。

 类似资料:
  • 问题内容: 我有一张表格,列出了来自特定网站的评论数量,如下所示: 我还有另一个表,列出了所有站点,例如从1到10 使用以下代码,我可以找出上个月缺少哪些站点条目: 生产: 我希望能够使用一些默认值(即“ 0”)将查询中列出的缺失网站插入到注释表中 问题是,我如何更新/插入表/值? 干杯, 背风处 问题答案:

  • 我想将行插入到具有唯一的、非自动递增主键的表中。 是否有一个本机SQL函数来计算最后一个键并将其递增,还是必须分两步进行:

  • 我有两个表,一个是user,它是父表,另一个是posts(child)表,它的coulmns是 我已经说明了

  • 问题内容: 我一直在看这段代码已有一段时间了,但我看不出问题出在哪里。我已经阅读了整个StackOverflow,但仍然看不到我的错误在哪里。 错误在第13行中,即thats 。我尝试通过http://www.w3schools.com/php/php_mysql_insert.asp帮助自己,但对我没有太大帮助。 问题答案: 警告: 切勿将 w3schools 用于学习目的。他们的教程中有很多错

  • 本文向大家介绍C#批量插入数据到Sqlserver中的三种方式,包括了C#批量插入数据到Sqlserver中的三种方式的使用技巧和注意事项,需要的朋友参考一下 本篇,我将来讲解一下在Sqlserver中批量插入数据。 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引。GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表

  • 问题内容: 我正在尝试将JTable中的多行数据保存到数据库中,这是我的代码供参考: 问题是,它仅将一行数据插入数据库。有人可以帮帮我吗?:( 谢谢! 问题答案: 从循环中删除以下行代码并将其放置在循环之前 示例: 用以下代码替换您的代码 然后运行它认为它起作用。 对于批量插入示例,请参见https://my.vertica.com/docs/5.0/HTML/Master/14878.htm