Azure Data Factory动态批量删除多表过期文件夹的配置疑问
Azure Data Factory 批量遍历表文件夹并删除5天前数据改造方案
1. 新增根路径Get Metadata活动获取所有表名
- 创建一个Get Metadata活动(命名如
Get Metadata - 所有表文件夹),关联的数据集路径设置为bronze/D365/Snapshot/ - 在活动的字段选项中,勾选
Child items,获取该路径下所有子文件夹(即所有表名)
2. 配置ForEach循环遍历表列表
- 添加ForEach活动,将Items设置为以下表达式:
@activity('Get Metadata - 所有表文件夹').output.childItems - (可选)若表数量较多,可关闭
Sequential选项开启并行处理,注意不要超过存储服务的并发限制
3. 改造数据集为动态参数化模式
- 打开循环内用于读取表下日期文件夹的数据集,添加一个字符串类型参数,命名为
TableName - 将数据集的
folder_path修改为动态路径:bronze/D365/Snapshot/@{dataset().TableName}/
4. 循环内Get Metadata活动绑定动态表名
- 在ForEach循环内的Get Metadata活动(读取当前表下的日期文件夹)中,找到数据集参数设置
- 将
TableName参数的值设置为表达式:
(@item().nameitem().name对应根路径Get Metadata返回的每个子文件夹名称,即表名)
5. 动态筛选并删除5天前的文件夹
- 在循环内的Get Metadata活动获取到当前表下的所有日期文件夹后,添加Filter活动筛选需删除的文件夹:
- 若按文件夹名称的日期判断(如文件夹名是
yyyy-MM-dd格式),Filter条件表达式:
注:若文件夹名是其他格式(如@lessOrEquals(convertToDateTime(item().name), addDays(utcNow(), -5))yyyyMMdd),需在convertToDateTime中指定格式,例如convertToDateTime(item().name, 'yyyyMMdd') - 若按文件夹最后修改时间判断,条件表达式:
@lessOrEquals(item().lastModified, addDays(utcNow(), -5))
- 若按文件夹名称的日期判断(如文件夹名是
- 添加Delete活动,将文件夹路径设置为
@{item().path}(Filter输出的每个文件夹对象的path属性),并勾选Delete folder选项确保删除整个文件夹
关键注意事项
- 确保所有Get Metadata和Delete活动使用的数据集拥有足够的存储账户权限(读取、删除权限)
- 测试时可先开启ForEach的
Sequential模式并限制循环次数,避免误删数据 - 若日期文件夹的时区与ADF的UTC时区不一致,需在日期转换时指定对应时区,例如:
@lessOrEquals(convertFromUtc(convertToDateTime(item().name), 'Asia/Shanghai'), addDays(utcNow(), -5))
内容的提问来源于stack exchange,提问作者Greencolor
相关产品推荐
相关产品推荐

