如何通过ADF管道活动仅复制目标ADLS中不存在的文件?
解决ADF仅复制目标不存在文件的方案
核心思路
先筛选出源端存在但目标端缺失的文件列表,再逐个复制这些文件,避免复制活动遍历整个源容器。
具体步骤
1. 获取源端全量文件列表
添加Get Metadata活动,配置源为你的ADLS源容器,Field list选择Child items,以此获取源端所有文件(a.txt、b.txt、c.txt)的名称及属性。
2. 获取目标端已存在文件列表
再添加一个Get Metadata活动,配置目标为ADLS目标容器,同样选择Field list为Child items,得到目标已有的文件(a.txt、c.txt)列表。
3. 筛选出待复制的文件
添加Filter活动:
- 输入集合选择第一个Get Metadata活动的
output.childItems - 筛选条件填写表达式:
该表达式会逐一校验源文件名是否存在于目标列表中,最终得到仅包含b.txt的待复制列表。@not(contains(activity('目标端Get Metadata活动名称').output.childItems, item().name))
4. 循环复制筛选后的文件
添加ForEach活动:
- 遍历集合选择Filter活动的
output.value - 在ForEach内部添加Copy活动:
- 源数据集的文件路径设置为
@item().name,指定单个待复制文件 - 目标数据集的文件路径同样设置为
@item().name,确保文件精准写入目标位置
- 源数据集的文件路径设置为
问题排查
- 之前用If活动无效的原因:If活动仅能判断单个全局条件,未对源文件做逐个筛选,复制活动仍会读取整个源容器的所有文件,导致全量复制。
- 注意ADLS文件名区分大小写,确保Get Metadata获取的文件名与目标端完全匹配。
内容的提问来源于stack exchange,提问作者Rajan
相关产品推荐
相关产品推荐

