簡體   English   中英

在Azure數據工廠中針對Azure SQL Server進行XML文件驗證

[英]XML File Validation Against Azure SQL Server in Azure Data Factory

我的XML文件 (位於Azure Blob容器中)

<?xml version="1.0" encoding="utf-8"?>
<Details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Person>
    <id>2</id>
    <name>XXX</name>
    <age>12</age>
  </Person>
</Details>

我的Azure SQL Server表

表名: UserTABLE

ID   | NAME | AGE | GENDER    
1    | JAY  | 12  |  MALE
2    | XXX  | 11  |  MALE

我想將XML文件與上述Azure SQL服務器(UserTABLE)進行比較,如果匹配,那么我想將XML文件中的其他字段更新 到我的UserTable中 ,否則,我想作為新行插入 Azure SQL中從XML到我的UserTable的所有給定字段值的服務器

誰能建議我該如何進行?

您可以使用登台表,在其中將截斷/加載xml數據,然后從同一ADF調用存儲的proc,以根據登台表中的此登台數據進行插入/更新。 在下一次運行期間,它將截斷表,然后再次執行相同的過程。 所有這些都可以通過您現有的ADF完成。

Azure SQL數據庫最近獲得了使用BULK INSERT或OPENROWSET從Azure Blob存儲加載文件的功能。 這里開始。

以示例代碼和數據為例,您可以導入xml,將其切碎,然后使用MERGE將其INSERT/UPDATE到主表中。 一個簡單的演示:

DROP TABLE staging 
DROP TABLE #tmp
DROP TABLE yourTable

CREATE TABLE staging ( rowId INT IDENTITY PRIMARY KEY, yourXML XML );
CREATE TABLE #tmp ( id INT PRIMARY KEY, name VARCHAR(30) NOT NULL, age INT NOT NULL );

SELECT * INTO yourTable FROM #tmp

INSERT INTO staging
SELECT *
FROM OPENROWSET(
    BULK 'archive/temp.xml',
    DATA_SOURCE = 'MyAzureBlobStorageAccount',
    SINGLE_BLOB
) AS x


INSERT INTO #tmp ( id, name, age )
SELECT
    x.c.value('(id/text())[1]', 'int' ) AS id,
    x.c.value('(name/text())[1]', 'varchar(30)' ) AS name,
    x.c.value('(age/text())[1]', 'int' ) AS age
FROM staging s
    CROSS APPLY s.yourXML.nodes('Details/Person') AS x(c)


-- Merge
MERGE INTO dbo.yourTable t
USING
(
SELECT * FROM #tmp
) s ON t.id = s.id

-- Insert new records ( no match on primary key )
WHEN NOT MATCHED BY TARGET
    THEN 
        INSERT ( id, name, age )
        VALUES ( id, name, age )

WHEN MATCHED 
        AND t.name != s.name
         OR t.age != s.age

-- Update existing ( no match on primary key )
THEN UPDATE 
        SET
            t.name = s.name,
            t.age = s.age;


SELECT *
FROM dbo.yourTable

您要做的最好的事情是暫時忘掉Data Factory。 編寫一個SQL腳本,該腳本可以成功完成上述設置並成功運行。 完成該工作后,將其隱藏到存儲的proc中。 測試一下。 完成這些工作后,您可以開始考慮Data Factory。 您將需要一個輸出數據集,但不需要輸入數據集。 此處完成本教程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM