Обновить и вставить в хранилище данных Azure с помощью конвейеров фабрики данных Azure

Я пытаюсь запустить конвейер копирования adf с и обновить и вставить операторы, которые должны заменить оператор слияния. в основном утверждение типа:

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?

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
Другие вопросы по тегам