簡體   English   中英

Azure Synapse Analytics - 刪除管道文件夾

[英]Azure Synapse Analytics - deleting pipeline Folder

我是 Synapse 的新手,我必須創建一個管道,該管道將從層次結構中的文件夾中刪除文件,如附加圖像。 期待等級制度 紅色半圈標記我要刪除的文件,例如超過 2 個月的文件。

至於現在我已經為單個文件夾制作了一個管道,並使用 for each 循環我可以訪問文件並刪除相應的文件。 它可以工作,因為我有大約 60-70 個文件夾,甚至更多文件,我想將 go 提升到更高的級別,並為每個文件夾創建一個管道來執行。 這是一個問題。 當我將 GetMetadata Activity 用於頂級文件夾並用於每個循環以獲取名稱文件夾時,我無法僅訪問文件夾中的文件。 你能幫我解決這個問題嗎?

使用每個循環刪除單個文件夾的管道

我們可以在execute pipeline活動的幫助下使用嵌套for each活動來實現這一點。 如前所述,使用通配符Get metadata返回所有沒有文件夾的文件,並且Delete活動無法識別通配符文件夾路徑(文件夾/*)。

  • 我為演示創建了一個類似的文件夾結構。 在我的管道中,我首先創建了一個包含所需文件名稱的數組參數req_files (sample1.csv 和 sample2.csv)。

在此處輸入圖像描述

注意:如果要動態執行此操作,可以使用append variable來構建所需的文件名(file09/22 和 file08/22)。

  • 我使用一個get metadata來獲取文件夾名稱(位於根文件夾內)。 我正在for each活動遍歷獲取元數據的 output(項目值為@activity('root folder contents').output.childItems )。
  • 在我的 for each 中,我使用了另一個get metadata活動來遍歷每個子文件夾(以獲取文件內容)。
  • 現在我有文件夾名稱和里面的文件列表。 我將使用execute pipeline為每個. 在名為delete_pipeline (我在其中執行刪除)的新管道中創建 3 個參數作為current_folder, folder_files and files_needed
  • 從父管道為它們中的每一個傳遞以下動態內容。
current_folder: @item().name
folder_files: @activity('sub folder contents').output.childItems
files_needed: @pipeline().parameters.req_files

在此處輸入圖像描述

  • 現在在delete_pipeline中,我有一個 for each 循環來遍歷我們正在傳遞的文件列表(項目值是@pipeline().parameters.folder_files )。
  • 在這里面,我使用了一個If condition活動。 這是因為我想刪除不在我的req_files參數中的文件(來自父管道的數組,我們傳遞給delete_pipeline中的files_needed參數)。 if condition活動的條件如下:
@contains(pipeline().parameters.files_needed,item().name)

在此處輸入圖像描述

  • 只有當req_files (files_needed)中不存在該文件時,我們才需要刪除該文件。 因此,當條件為假時,我們執行刪除。

  • 我在用於刪除活動的數據集中創建了 2 個參數file_namepath_of_file_to_deletefile_name_to_delete ,並具有以下動態內容。

file_namepath_of_file_to_delete: Folder/@{pipeline().parameters.current_folder}
file_name_to_delete: @item().name

在此處輸入圖像描述

當我運行管道時,它會保留所需的文件並刪除 rest。 以下是 output 圖片供參考。

暫無
暫無

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

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