如何通过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.childItemsCondition属性使用以下表达式,验证文件夹名称为有效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
相关产品推荐
相关产品推荐

