Azure Data Factory嵌套文件夹文件修改时间获取及过滤复制问题
解决嵌套文件夹中按最后修改时间筛选并复制文件的问题
问题梳理
你需要在ADF中遍历home容器下product_data目录的多层嵌套文件夹,筛选出近10天内修改的Parquet文件(目标文件为20231102.parquet,最后修改于11月7日),但当前存在以下问题:
- For Loop内的Get Metadata活动“按最后修改时间过滤”未生效
- 配置的Filter活动因参数错误导致失败
修正步骤
1. 调整Get Metadata活动配置
确保For Loop内的Get Metadata活动设置为获取子项(Get child items),路径指向当前遍历的文件夹(比如用@item().path)。注意:ADF的Get Metadata服务端过滤可能因时区、路径格式等问题失效,建议先获取所有子项,再用Filter活动做精准筛选。
2. 修正Filter活动参数
你之前的Filter配置存在两个关键错误:
- Items参数错误:不能直接用
@activity('Get Files Metadata').output.itemName,应该指向Get Metadata返回的子项数组:@activity('Get Files Metadata').output.childItems - Condition参数错误:需要遍历每个子项的
lastModified属性,而非直接取活动的lastModified值,同时要匹配你需要的近10天条件(而非之前的30分钟):@greater(item().lastModified, addDays(utcNow(), -10))
3. 遍历Filter后的结果
将For Loop的Items参数设置为Filter活动的输出结果,确保仅处理符合条件的文件:
@activity('Filter Files').output.value
4. 复制文件的路径拼接
在Copy活动中,源文件路径需要拼接为完整的存储路径,比如:
@concat(item().path, '/', item().name)
额外注意事项
- 时区问题:
utcNow()返回UTC时间,若你的文件修改时间是本地时区,需做时区转换(比如convertTimeZone(item().lastModified, 'UTC', 'Asia/Shanghai')) - 文件类型筛选:如果需要仅处理Parquet文件,可在Filter条件中追加判断:
@and(greater(item().lastModified, addDays(utcNow(), -10)), endsWith(item().name, '.parquet'))
内容的提问来源于stack exchange,提问作者Mariah Akinbi
相关产品推荐
相关产品推荐

