簡體   English   中英

Azure 如果參數化,使用二進制數據集進行復制活動的數據工廠無法復制文件夾內容

[英]Azure data factory with a copy activity using a binary dataset fails to copy folder contents if parameterized

在我的 Azure 數據工廠中,我需要從 SFTP 源復制數據,該源已將數據結構化到具有以下層次結構年 -> 月 -> 日期 -> 文件的基於日期的目錄中

我創建了一個鏈接服務和一個二進制數據集,其中數據集“文件系統”指向主機,“目錄”指向包含年份目錄的文件夾。 例如:主機/exampledir/yeardir/

帶有包含年份目錄的 yeardir。

當我手動寫入我想要文件夾“2015”的數據集時,它將復制整個 2015 文件夾,但是如果我為目錄設置一個參數,然后從復制活動中輸入相同的文件夾路徑,它會創建一個名為我的 blob 存儲中的“2015”不包含任何數據。

我當前的解決方法是為循環創建一個嵌套的獲取元數據序列,該循環深入每個文件夾和子文件夾並復制單個文件結尾。 然而,期望的結果是讓單個二進制數據集復制每個文件夾而不需要獲取元數據。

這在數據工廠的 scope 內可能嗎?

編輯:

有效的手動文件路徑

參數化文件路徑

復制活動中使用的屬性

為了添加更多上下文,我嘗試手動將文件路徑寫入復制活動,如圖所示,我還嘗試使用變量、參數的動態內容(使用基本文件路徑和 concat),並將基本文件路徑放入數據集中與@dataset().filePath 一起。 到目前為止,這些解決方案都沒有對我有用,要么不復制任何內容,要么創建我之前提到的空文件。

接收器是鏈接到 Azure Data Lake Storage Gen2 的二進制數據集。

接收器文件路徑

更新:

接受的答案是解決方案。 我的問題是,當作為參數傳遞時,檢索到的源數據集在末尾會有一個換行符。 我用 concat 來清理它,從那以后就一直有效。

由於給出exampledir/yeardir/2015非常適合您,並且您想復制exampledir/yeardir中存在的所有文件夾,您可以按照以下步驟操作:

  • 我采取了get metadata活動來獲取文件夾exampledir/yeardir/的子項(在我的演示中,我采用的路徑為“maindir/yeardir”。)。

在此處輸入圖像描述

  • 這將為您提供所有年份的文件夾。 我僅以2020年和2021年為例。

在此處輸入圖像描述

  • 現在,每個活動只有一個項目值作為獲取元數據活動的子項目 output,我直接使用了復制活動。
@activity('Get Metadata1').output.childItems

在此處輸入圖像描述

  • 現在,在每個內部我都有我的復制數據活動。 對於源和接收器,我都為路徑創建了一個數據集參數。 我為源路徑提供了以下動態內容。
maindir/yeardir/@{item().name}

在此處輸入圖像描述

  • 對於sink,我給出了output目錄如下:
outputDir/@{item().name}

在此處輸入圖像描述

  • 由於像exampledir/yeardir/2015那樣手動提供路徑,我們使用獲取元數據活動獲得了年份文件夾列表。 我們遍歷了其中的每一個,並將每個文件夾的源路徑復制為exampledir/yeardir/<current_iteration_year_folder>

  • 根據我給出接收器路徑的方式,數據將與內容一起復制。 以下是參考圖像。

在此處輸入圖像描述

暫無
暫無

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

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