簡體   English   中英

使用 Azure 數據工廠管道從具有“類似文件夾的結構”的 Blob 存儲中獲取元數據

[英]Get metadata from Blob storage with "folder like structure" using Azure Data Factory pipeline

我會直截了當。 這就是問題:

我有一個帶有 Blob 存儲的 Azure 存儲帳戶,其中有多個容器。 在這些容器中,我確實有一個由目錄和子目錄組成的“類似文件夾的結構”(我想這將是正確的術語,因為在數據集中我確實在容器之后有帶有“目錄”的字段,如您在圖片。 來自 Azure 的屏幕顯示,帶有 Container->Directory->File

結構如下(為簡單起見,我將使其更短但仍然具有代表性): 數據存儲結構 - Container->Years->Months->CSVDocs

我需要從 CSV 文件(特別是文件名)中獲取元數據,這樣我就可以向管道添加額外的邏輯,以便它知道要復制哪些文件。 獲取這些文件名的最佳解決方案是什么?

我嘗試使用 For Each 語句。 首先,我創建了 Dateset,我只指定了容器名稱,並在 Get Metadata 活動中使用了它,在那里我以年份列表的形式獲得了輸出(我列出了子項)。 然后我創建了另一個數據集,但這次參數化了我將目錄定義為@dataset().FileName (我沒有定義文件名)。 我在 For Each 循環中使用了這個數據集和 Get Matadata 活動,我可以在上面的文件結構中看到月份數的列表。 然后我繼續創建第三個數據集(我認為這已經很愚蠢但我試了一下),我想在目錄字段中包含兩個參數,這兩個參數將被連接起來。 在這里我發現我無法在另一個數據集中使用先前數據集的參數。 所以我想也許我可以使用變量......我也無法使用它,因為每次我想在“添加動態內容”中使用變量時都會出錯。 因此,我嘗試使用僅定義容器和文件名的數據集,但最終得到的結果僅為在數據集級別為文件名設置的默認值。

ADF 中流水線的當前結構

由於我對 ADF 和創建管道很陌生,我想知道我錯過了什么。 您提出的獲取 CSV 文檔文件名的解決方案是什么,以便我以后可以在管道中使用它們?

我已經通過使用執行管道活動迭代 For Each 活動中的多個子文件夾來進行復制。

源數據集:

為源創建數據集並添加數據集參數以動態傳遞值。

在此處輸入圖像描述

主要管道:

  1. 使用Get Metadata活動,獲取給定容器內的文件夾。

在此處輸入圖像描述

在此處輸入圖像描述

  1. 將子項傳遞給ForEach活動。 在 ForEach 中,添加execute pipeline以調用另一個管道以獲取每個當前項目的子文件夾 ( @item().name )。

在此處輸入圖像描述

子管道1 (獲取子文件夾):

  1. 在子管道中,創建管道參數以從父管道獲取當前項名稱(主文件夾名稱)。

在此處輸入圖像描述

  1. 使用Get Metadata活動,獲取子文件夾列表。 使用數據集中的參數。

數據集屬性值: @concat(pipeline().parameters.dir1,'/')

在此處輸入圖像描述

在此處輸入圖像描述

  1. 將子項傳遞給 ForEach 活動。 在 ForEach 中,如果需要,您可以使用過濾器活動來過濾掉子文件夾名稱。 然后傳遞所需的當前項以執行管道活動以調用子管道(從每個子文件夾中獲取文件)。 從此處傳遞子管道參數值。

@concat(pipeline().parameters.dir1,'/',item().name,'/')

在此處輸入圖像描述

子管道2 (獲取文件和進程):

  1. 創建管道參數以從其父管道獲取值。

在此處輸入圖像描述

  1. 使用 Get Metadata 活動,通過將參數值傳遞給數據集參數,從每個子文件夾中獲取文件。

在此處輸入圖像描述

在此處輸入圖像描述

  1. 將輸出子項傳遞給 ForEach 活動。 在 ForEach 中,您可以使用過濾器活動來過濾掉文件。

  2. 使用復制數據活動可以將所需的文件復制到接收器。

數據集屬性:

目錄 - @concat(pipeline().parameters.path,'/',item().name)

在此處輸入圖像描述

暫無
暫無

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

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