[英]Azure Data Factory - Recording file name when reading all files in folder from Azure Blob Storage
[英]Create Folder Based on File Name in Azure Data Factory
我需要將幾個文件從 ADLS Gen1 位置復制到另一個 ADLS Gen1 位置,但必須根據文件名創建文件夾。
我在源 ADLS 中的文件很少,如下所示:
ABCD_20200914_AB01_Part01.csv.gz
ABCD_20200914_AB02_Part01.csv.gz
ABCD_20200914_AB03_Part01.csv.gz
ABCD_20200914_AB03_Part01.json.gz
ABCD_20200914_AB04_Part01.json.gz
ABCD_20200914_AB04_Part01.csv.gz
場景 1我必須將這些文件復制到目標 ADLS 中,如下所示,只有 csv 文件,並從文件名創建文件夾(如果文件夾存在,復制到該文件夾):
AB01-
|-ABCD_20200914_AB01_Part01.csv.gz
AB02-
|-ABCD_20200914_AB02_Part01.csv.gz
AB03-
|-ABCD_20200914_AB03_Part01.csv.gz
AB04-
|-ABCD_20200914_AB04_Part01.csv.gz
場景 2我必須將這些文件復制到目標 ADLS 中,如下所示,只有 csv 和 json 文件,並從文件名創建文件夾(如果文件夾存在,復制到該文件夾):
AB01-
|-ABCD_20200914_AB01_Part01.csv.gz
AB02-
|-ABCD_20200914_AB02_Part01.csv.gz
AB03-
|-ABCD_20200914_AB03_Part01.csv.gz
|-ABCD_20200914_AB03_Part01.json.gz
AB04-
|-ABCD_20200914_AB04_Part01.csv.gz
|-ABCD_20200914_AB04_Part01.json.gz
有沒有辦法在數據工廠中實現這一點? 感謝任何線索!
所以我不確定這是否會完全有幫助,但我遇到了類似的情況,我們有 1 個 zip 文件,我不得不將這些文件復制到他們自己的文件夾中。
因此,您可以做的是在您將使用的數據接收器中使用參數,以及您將在其中執行子字符串的可變活動。
下面的工作更多是針對 delta 工作的,但我認為其中有足夠的東西希望有所幫助。 我的工作可以分為 3 個部分。
第一個橙色部分從您要復制的 ADLS gen 1 文件夾中獲取最新的文件名日期。
然后它被移動到橙色塊。 在底部,我根據 ADLS gen 1 日期獲得最新的文件名,然后我執行一個子字符串,從中取出文件的日期部分。 在您的情況下,您可以做一個數組並捕獲您需要的所有文件夾名稱。
在頂部,我首先提取該文件並將其解壓縮到測試着陸區。
然后,我獲取該 zip 文件中所有文件的名稱,以便在 ForEach 活動中使用它們。 這些文件名將成為復制活動的文件夾。
然后我將這些子項從“獲取暫存文件列表”傳遞到 ForEach:
在那個 ForEach 活動中,我有一個副本活動。 為此,我制作了數據集。 從我們創建的初始登陸區獲取文件。 對於這個例子,我們稱之為 Staging(原諒 ms 繪圖):
這樣做的目的是轉到那個虛擬文件夾並獲取剛剛復制到那里的每個文件。 從那 1 個 zip 文件中,我們預計有 5 個文件。
在 Sink 部分,我所做的是創建一個帶有文件夾和文件名參數的新數據集。 在該數據集中,我將該數據放入同一個容器中,但創建了一個名為“Stage”的新文件夾並將其與項目名稱連接起來。 我還添加了一個“替換”命令來從文件名中刪除“.txt”。
這將做的是來自該虛擬暫存的文件名,然后它將具有專門針對每個文件的文件夾名稱。 根據您的要求,我不確定這是否是您想要做的,但是您可以隨時對其進行修改以使其更具體。
對於項目名稱,我基本上得到相同的文件名,然后替換“.txt”,連接日期值的名稱,然后才添加“.txt”擴展名。 否則我將不得不在文件名中添加“.txt”。
最后,我創建了一個刪除活動,然后將用於刪除所有文件(我不確定是否已正確設置,因此可以隨意調整)。
希望上面的描述讓您對如何使用文件參數有所了解。 如果這對您的情況有幫助,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.