You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ADF管道的Delete Activity删除ADLS多子文件夹下的旧文件夹

在Azure Data Factory中动态删除ADLS中7天以上的日期命名子文件夹

需求背景

需要删除ADLS容器raw下MainFolder各子文件夹(如SubfolderA、SubfolderB)中,名称为yyyyMMdd格式且超过7天的文件夹。示例中需删除SubfolderA下的20230415、20230410,以及SubfolderB下的20230420、20230405。

实现步骤

1. 确认基础GetMetadata活动配置(已完成)

你的现有GetMetadata活动(命名为GetMainSubfolders)需确保:

  • 数据集指向ADLS路径/raw/MainFolder/
  • 勾选Child items选项,用于获取该路径下的所有一级子文件夹(SubfolderA、SubfolderB等)

2. 添加变量与外层ForEach遍历一级子文件夹

  • 在管道变量面板创建字符串类型变量currentSubfolder,用于存储当前遍历的一级子文件夹名称
  • 添加ForEach活动,配置:
    • Items属性:@activity('GetMainSubfolders').output.childItems
    • 内部第一个活动为Set Variable,将currentSubfolder的值设为@item().name

3. 获取一级子文件夹下的日期文件夹

在ForEach内部添加第二个GetMetadata活动(命名为GetDateFolders):

  • 数据集路径设为动态值:@concat('/raw/MainFolder/', variables('currentSubfolder'), '/')
  • 勾选Child items选项,获取该子文件夹下的所有日期命名文件夹

4. 筛选超过7天的目标文件夹

添加Filter活动,配置:

  • Items属性:@activity('GetDateFolders').output.childItems
  • Condition属性使用以下表达式,验证文件夹名称为有效8位日期且早于当前日期减7天:
    @and(
        not(empty(item().name)),
        equals(length(item().name),8),
        less(
            convertFromUtc(item().name, 'yyyyMMdd'),
            addDays(utcNow(), -7, 'yyyyMMdd')
        )
    )
    

5. 遍历筛选结果执行删除

添加嵌套ForEach活动,配置:

  • Items属性:@activity('FilterOldFolders').output.Value
  • 内部添加Delete活动:
    • 数据集路径设为动态值:@concat('/raw/MainFolder/', variables('currentSubfolder'), '/', item().name)
    • Delete type选择Folder
    • 勾选Recursively(确保删除文件夹下所有内容)

6. 调试与验证

启动管道调试,依次检查各活动输出:

  • 确认GetMainSubfolders正确获取所有一级子文件夹
  • 确认GetDateFolders获取到对应子文件夹下的日期文件夹
  • 确认FilterOldFolders仅保留超过7天的目标文件夹
  • 确认Delete活动成功删除指定文件夹

内容的提问来源于stack exchange,提问作者SandeepB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:35:21