ADF Copy Data活动向SFTP上传文件时生成带GUID临时文件名疑问
ADF SFTP目标端临时文件行为说明及解决方案
首先明确,你推测的复制活动执行逻辑完全属实,这是ADF对接所有文件类目标存储的默认实现,自承载集成运行时和云集成运行时都会触发该行为,有大量用户遇到过相同的现象。
该设计的核心逻辑是为了避免传输中断生成不完整的目标文件,防止下游读取到残次数据,具体执行步骤和你描述的完全一致:
- 第一步:在目标路径创建带随机GUID后缀的临时文件
- 第二步:将全量数据流式写入该临时文件
- 第三步:写入完成无异常后,将临时文件重命名为你指定的正式文件名,重命名失败则自动删除临时文件
因此SFTP侧的监听工具会观测到短暂存在的GUID后缀文件,而最终目录下仅存在正式文件。
针对临时文件触发第三方自动处理的解决方案
方案1:调整SFTP侧监听规则(改造成本最低)
要求SFTP站点的自动处理逻辑添加过滤规则即可:
- 忽略文件名包含GUID格式字符串、或后缀为
.tmp的文件 - 仅监听后缀为
.csv,且连续5~10秒文件大小无变化的稳定文件,不触发还处于写入状态的文件的处理流程
方案2:修改ADF复制活动配置
ADF V2及以上版本支持修改写入行为:
在SFTP目标端的配置项中找到「复制行为」,将默认的「自动确定」改为「直接写入」,即可跳过临时文件步骤,直接写入你指定的正式文件名。
注意:开启该配置后如果传输过程中出现网络中断、任务失败等异常,会在目标路径残留不完整的CSV文件,需要你额外在管道中添加失败后的目标文件清理逻辑。
你也可以调整写入路径规则:先将文件写入SFTP的独立临时目录(该目录不纳入第三方系统的监听范围),复制活动执行成功后,再通过ADF的SFTP活动执行重命名操作,将文件移动到正式监听目录,完全避免临时文件暴露在监听路径下。
方案3:增加中间存储校验环节
你可以先将CSV文件导出到Azure Blob等中间存储,确认文件大小、完整性符合预期后,再将完整文件上传到SFTP的正式目录,大幅减少文件在SFTP侧的写入停留时间,降低被误触发的概率。
内容的提问来源于stack exchange,提问作者Martin Pein
相关产品推荐
相关产品推荐

