ADF复制数据至SFTP因无删除权限失败,求解决方案
解决Azure Data Factory复制到SFTP时因删除权限失败的问题
核心原因
ADF的Copy Data活动中,SFTP Sink默认采用「Overwrite」(覆盖)写入行为时,会先尝试删除目标目录下的现有文件。若SFTP账号无删除权限,就会触发Permission denied to access '/upload/MyFile.txt'这类权限拒绝错误。
可行解决方案
方案1:启用「临时文件名上传」(推荐)
开启该选项后,ADF会先将文件上传为临时文件(例如MyFile.txt.tmp),上传完成后再重命名为目标文件名。此操作仅需SFTP账号拥有目标目录的写入权限和重命名权限,无需删除权限:
- 进入Copy Data活动的「Sink」配置页
- 展开「高级」设置
- 勾选「使用临时文件名」
- 可自定义临时文件后缀(默认是
.tmp)
方案2:修改写入行为为「追加」(仅适用于允许追加内容的场景)
若业务允许在现有文件末尾追加数据,可调整写入行为:
- 在SFTP Sink的「写入行为」下拉菜单中选择「追加」
- 此方式不会删除现有文件,直接在文件末尾写入新数据
方案3:使用自定义活动/Azure Function上传文件
若上述方案不满足需求,可通过Azure Function编写自定义SFTP上传逻辑,绕过ADF默认的删除流程:
- 使用Renci.SshNet库编写上传代码,调用
SftpClient.UploadFile时指定fileMode: FileMode.Create,直接覆盖现有文件无需先删除 - 在ADF中添加「自定义活动」,配置调用该Azure Function
日志验证
启用临时文件名上传后,日志会显示类似流程,说明已跳过删除步骤:
Start to upload file '/upload/MyFile.txt.tmp' Start to rename file '/upload/MyFile.txt.tmp' to '/upload/MyFile.txt'
内容的提问来源于stack exchange,提问作者InbetweenWeekends
相关产品推荐
相关产品推荐

