使用Azure数据工厂管道更新并插入Azure数据仓库

时间:2019-03-05 14:40:04

标签: azure azure-data-factory-2 azure-sql-data-warehouse

我正在尝试使用adf复制管道以及应替换merge语句的update和insert语句运行。基本上是这样的语句:

UPDATE TARGET 
SET ProductName = SOURCE.ProductName, 
TARGET.Rate = SOURCE.Rate 
FROM  Products AS TARGET
INNER JOIN UpdatedProducts AS SOURCE 
ON TARGET.ProductID = SOURCE.ProductID
WHERE TARGET.ProductName <> SOURCE.ProductName 
OR TARGET.Rate <> SOURCE.Rate

INSERT Products (ProductID, ProductName, Rate) 
SELECT SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate
FROM UpdatedProducts AS SOURCE 
WHERE NOT EXISTS
(
SELECT 1
FROM Products 
WHERE ProductID = SOURCE.ProductID
)

如果目标是蔚蓝的sql db,我将使用这种方式:https://www.taygan.co/blog/2018/04/20/upsert-to-azure-sql-db-with-azure-data-factory 但是如果目标是adw,则不存在存储过程选项!有什么建议吗?我必须先拥有一个临时表,然后运行更新并将语句从stg_table插入到target_table吗?还是有可能直接从adf做到这一点?

1 个答案:

答案 0 :(得分:0)

如果您不能使用存储过程,我的建议是创建第二个副本数据转换。在第二个转换上运行前脚本,并放下该表,因为它是您在第一个转换上创建的临时表。

BEGIN

MERGE Target AS target_sqldb
USING TempTable AS source_tblstg
ON (target_sqldb.Id= source_tblstg.Id)

WHEN MATCHED THEN
    UPDATE SET
    [Name] = source_tblstg.Name,
    [State] = source_tblstg.State

WHEN NOT MATCHED THEN
    INSERT([Name], [State])
    VALUES (source_tblstg.Name, source_tblstg.State);

DROP TABLE TempTable;

END