使用Azure Data Factory获取最近5分钟修改的文件夹并传入Copy data活动
解决ADF中获取最近5分钟修改的目标文件夹并传入Copy Data的方案
步骤1:获取根目录下的所有子项信息
- 创建Get Metadata活动(命名为
Get_Silver_Children),关联到silver/目录对应的数据集 - 在字段列表中勾选
Child Items和Last Modified,获取该目录下所有子项的类型、名称及修改时间
步骤2:过滤出符合条件的DATE文件夹
- 添加Filter活动(命名为
Filter_Date_Folders),输入源为@activity('Get_Silver_Children').output.childItems - 设置过滤条件,只保留文件夹类型且修改时间在最近5分钟内的项:
这一步直接排除了@and(equals(item().type, 'Folder'), greater(item().lastModified, addMinutes(utcNow(), -5)))_SUCCESS这类文件
步骤3:遍历DATE文件夹收集ID级目录信息
- 先创建数组类型变量(如
var_Valid_ID_Folders),用于存储所有符合条件的ID文件夹的完整路径和修改时间 - 添加For Each活动(命名为
Loop_Date_Folders),输入源为@activity('Filter_Date_Folders').output.value,勾选Sequential确保顺序执行 - 在For Each内部添加Get Metadata活动(命名为
Get_ID_Children),数据集路径设为@concat('silver/', item().name),同样勾选Child Items和Last Modified - 再添加Append Variable活动,将当前DATE下的所有ID文件夹信息追加到变量中,表达式为:
@foreach(activity('Get_ID_Children').output.childItems, createObject( 'fullPath', concat('silver/', item().name, '/', item().name), 'lastModified', item().lastModified ) )
步骤4:筛选并排序取最新的ID文件夹
- 添加Filter活动(命名为
Filter_Recent_ID_Folders),输入源为@variables('var_Valid_ID_Folders'),过滤条件为:@greater(item().lastModified, addMinutes(utcNow(), -5)) - 添加Sort活动(命名为
Sort_ID_Folders),输入源为@activity('Filter_Recent_ID_Folders').output.value,按lastModified字段降序排序 - 创建字符串变量(如
var_Target_Folder),用Set Variable活动将排序后的第一个项的路径存入:@activity('Sort_ID_Folders').output.value[0].fullPath
步骤5:传入Copy Data活动
- 在Copy Data活动的源路径中,直接引用变量:
@variables('var_Target_Folder') - 确保源数据集支持动态路径配置(如通过参数或变量绑定路径)
关键注意事项
- 时间判断默认使用UTC时间,若文件夹修改时间为本地时区,需额外做时区转换
- 若DATE文件夹本身修改时间未更新,但内部ID文件夹有更新,可调整步骤2的逻辑:跳过DATE文件夹的时间过滤,直接遍历所有DATE文件夹后再检查ID文件夹的修改时间
内容的提问来源于stack exchange,提问作者user9532692
相关产品推荐
相关产品推荐

