![](/img/trans.png)
[英]Azure Data Factory Alter Row | Skip Columns while matching Data Between Source and Sink
[英]matching the columns in a source file with sink table columns to make sure they match using Azure Data Factory
我有一個 Azure 數據工廠觸發器,當文件被放置在 blob 存儲中時,該觸發器將被觸發,該觸發器將開始管道執行並將文件名傳遞給數據流活動。 我想確保文件中 header 行的所有列名都在接收器表中。 匯表中有一個不應該在比較中的標識列。 不確定如何解決這個任務,我已經閱讀了“派生列”活動,這是我應該采取的路線嗎?
戰略:
使用兩個 ADF 管道,一個獲取所有文件的列表,另一個處理每個文件,將其內容復制到特定的 SQL 表。
設置:
我創建了 4 個 CSV 文件,遵循您需要的模式:“[CustomerID] [TableName] [FileID].csv”和 4 個 SQL 表,每種文件一個。
關聯服務
在 Azure 數據工廠中,使用 Key Vault 創建了以下鏈接服務(Key Vault 是可選的)。
數據集
創建了以下數據集。 請注意,我們已經創建了一些參數以允許管道指定源文件和目標 SQL 表。
數據集“AzureSQLTable”有一個參數來指定目標 SQL 表的名稱。
數據集“DelimitedTextFile”有一個參數來指定源文件的名稱 CSV。
數據集“DelimitedTextFiles”沒有參數,因為它將用於列出源文件夾中的所有文件。
流水線
第一個管道“獲取文件”將從源文件夾(獲取元數據活動)中獲取 CSV 個文件的列表,然后,對於每個文件,調用第二個管道將 CSV 文件名作為參數傳遞。
在 foreach 循環內,調用第二個管道“Process File”,將文件名作為參數傳遞。
第二個管道有一個參數“pFileName”,用於接收要處理的文件的名稱和一個根據文件名計算目標表名稱的變量。
第一個活動是在文件名中使用拆分來提取組成目標表名所需的部分。 在下面的表達式中,我們使用“__”分隔符拆分文件名,然后使用第一部分和第二部分組成目標表名。 @concat(string(split(pipeline().parameters.pFileName, '_')[0]),'_',string(split(pipeline().parameters.pFileName, '_')[10]))
然后,第二個活動將使用動態映射將文件從源“pFileName”復制到目標表“vTableName”,即不添加特定的列名稱,因為這將是動態的。
我在此示例中使用的文件和 ADF 代碼可在此處獲得: https://github.com/diegoeick/stack-overflow/tree/main/69340699
我希望這能解決您的問題。
如果您仍然需要將 CustomerID 和 FileID 保存在數據庫表中,您可以使用動態映射並使用可用參數(文件名)並在復制活動的映射選項卡中使用動態映射創建 json。 您可以在此處找到更多詳細信息: https://learn.microsoft.com/en-us/azure/data-factory/copy-activity-schema-and-type-mapping#parameterize-mapping
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.