如何从 Azure Databricks 对 Azure SQL Server 中的表执行更新插入操作?

问题描述 投票:0回答:1

这是一项 ETL 作业。因此,如果今天的数据已存在于目标表(在 Azure SQL Server 中)中,我需要用今天处理中的新记录替换现有记录。否则,插入所有记录。我相信这可以通过 MERGE INTO 命令来完成,但是如何从 Azure Databricks 对 Azure SQL 数据库表执行更新插入。

sql pyspark azure-sql-database etl azure-databricks
1个回答
1
投票

为了避免在 Databricks 中将数据更新插入 SQL Server 表时出现主键冲突问题,您可以在 SQL Server 中使用 MERGE 语句。

MERGE 语句允许您根据目标表中是否存在数据来执行 INSERT 和 UPDATE 操作。您可以使用 MERGE 语句来比较源表和目标表中的数据,然后根据需要插入或更新数据。

这里是如何使用 MERGE 语句将数据更新插入 SQL 的示例

为了避免在 Databricks 中将数据更新插入 SQL Server 表时出现主键冲突问题,您可以在 SQL Server 中使用 MERGE 语句。

MERGE 语句允许您根据目标表中是否存在数据来执行 INSERT 和 UPDATE 操作。您可以使用 MERGE 语句来比较源表和目标表中的数据,然后根据需要插入或更新数据。

以下是如何使用 MERGE 语句将数据更新插入 SQL Server 表的示例:

MERGE INTO dbo.MyTable AS target
USING (
  SELECT 
    Column1, Column2, Column3
  FROM 
    my_source_data
) AS source 
ON (target.PrimaryKeyColumn = source.PrimaryKeyColumn)
WHEN MATCHED THEN 
  UPDATE SET
    Column1 = source.Column1,
    Column2 = source.Column2,
    Column3 = source.Column3
WHEN NOT MATCHED THEN
  INSERT (PrimaryKeyColumn, Column1, Column2, Column3)
  VALUES (source.PrimaryKeyColumn, source.Column1, source.Column2, source.Column3);

在此示例中,dbo.MyTable 是 SQL Server 中的目标表,my_source_data 是要更新插入到目标表中的源数据。 PrimaryKeyColumn 是目标表中的主键列,用于匹配源表和目标表之间的记录。

WHEN MATCHED 子句用于更新目标表中的现有记录,WHEN NOT MATCHED 子句用于向目标表中插入新记录。

通过使用 MERGE 语句,您可以在将新记录插入目标表之前检查记录是否存在,从而避免主键违规问题。如果目标表中已存在具有相同主键的记录,则会更新该记录而不是插入该记录,这将防止创建重复项。

© www.soinside.com 2019 - 2024. All rights reserved.