如何通过ADF将多文件夹打包为单个Zip文件并按时触发执行
ADF批量SFTP文件压缩超时解决方案:生成触发时间命名的单Zip包
核心问题拆解
直接用复制活动的ZipDeflate处理大量文件时,边复制边压缩的串行逻辑容易触发20分钟超时,且原生功能无法直接合并多文件夹生成指定命名的Zip包,需拆分流程优化。
分步实现方案
1. 批量复制文件到Blob临时存储
- 新建复制活动,源为SFTP服务器,路径选择包含
Folder1和Folder2的父目录,勾选递归保留原目录结构 - 目标设为Blob存储的临时容器(如
temp-sftp-staging),启用并行复制,根据SFTP服务器带宽设置并行度(建议8-16),利用ADF并行传输能力快速完成文件复制
2. 自定义压缩生成触发时间命名的Zip包
放弃原生ZipDeflate,用Azure Function或ADF自定义活动实现压缩逻辑:
- 传入触发时间参数:通过动态表达式
@formatDateTime(trigger().scheduledTime, 'yyyyMMddHHmm')获取触发时间,作为Zip文件名(如backup_202405201420.zip) - 压缩逻辑:从临时容器中读取
Folder1和Folder2的所有文件,保留原目录结构压缩到目标Zip包,完成后将Zip包移动到最终Blob容器(如sftp-backups) - 清理临时文件:压缩完成后删除临时容器中的未压缩文件,避免占用存储空间
3. 配置20分钟周期触发
创建ADF时间触发,设置 recurrence 为每20分钟,将触发时间参数传递给压缩步骤,确保每个周期生成唯一命名的Zip包
性能优化建议
- SFTP连接:启用二进制传输模式(匹配源服务器类型),减少传输过程中的编码开销
- Blob存储:使用ADLS Gen2存储账户,利用其高吞吐量特性提升文件读写速度
- 错误处理:为复制和压缩步骤添加重试策略(3次重试,间隔5分钟),并设置临时文件清理失败的警报规则
内容的提问来源于stack exchange,提问作者NEWS
相关产品推荐
相关产品推荐

