Azure Data Factory复制目录时如何跳过打开状态的Excel文件
解决方案
1. 调整源数据集的FilePattern,排除临时锁定文件
Excel的锁定临时文件以~$开头,直接修改源数据集的FilePattern表达式,添加对这类文件的排除逻辑:
将原本的:
@concat('*',pipeline().parameters.FilePattern,'*')
替换为:
@concat('[!~$]*', pipeline().parameters.FilePattern, '*')
这个表达式利用通配符[!~$]限制文件名的第一个字符不能是~或$,直接排除所有~$开头的临时锁定文件,同时保留原有文件匹配规则。
2. 在ForEach内添加Lookup活动过滤文件列表(避免嵌套ForEach)
如果上述通配符方式无法满足更复杂的过滤需求,可以在现有ForEach活动内调整逻辑,先通过Lookup获取有效文件列表,再批量复制:
- 添加一个Lookup活动,源使用文件共享数据集,路径设置为
@item().DS_Directory_Name,FilePattern沿用原表达式@concat('*',pipeline().parameters.FilePattern,'*')。 - 在Lookup活动的查询选项中,添加过滤条件:
这会返回当前目录下所有符合规则且未被锁定的文件元数据(包含文件路径)。SELECT * WHERE name NOT LIKE '~$%' - 修改后续的Copy Data活动,将源数据集的文件路径设置为:
该表达式将Lookup返回的有效文件路径拼接为逗号分隔的字符串,让Copy Data仅复制这些已过滤的文件,避免尝试访问锁定的临时文件。@join(activity('Lookup_Valid_Files').output.value, ',')
3. 启用Copy Data活动的容错选项(针对文件列表模式)
当采用上述Lookup获取文件列表的方式后,Copy Data活动的源已从“目录加载”变为“指定文件列表”,此时可以启用Copy Data的容错功能:
- 在Copy Data活动的设置标签下,找到容错设置,勾选跳过无法打开的文件,并设置允许跳过的文件数量或比例。
- 即使仍有文件被锁定(比如Lookup之后文件才被打开),Copy Data会自动跳过这些文件,不会导致整个流水线报错。
内容的提问来源于stack exchange,提问作者simplicITy
相关产品推荐
相关产品推荐

