Azure Data Factory中基于文件列表创建ZIP并重命名文件
基于Azure Data Factory原生组件实现自定义路径的ZIP打包方案
目前ADF原生的「文件列表」选项无法直接实现为每个文件单独指定ZIP内的目标路径/重命名——该模式仅能按源文件的原始相对路径打包,无法自定义单个文件在ZIP内的结构。不过可以通过纯ADF原生组件组合实现需求,无需依赖Azure Function、Notebook等外部资源,具体步骤如下:
1. 准备映射规则文件
将原文件路径与ZIP内目标路径的映射关系整理为CSV格式的文件(也可使用TXT,需统一分隔符),存储在Blob Storage中,每行格式示例:
Guid1/Guid1.txt, docs/report1.pdf Guid2/Guid2.jpg, images/cover.jpg
表头建议设为SourcePath, TargetPath,方便后续活动读取字段。
2. 使用Lookup活动读取映射表
添加Lookup活动,配置如下:
- 数据源:选择存储映射文件的Blob存储账户,指向该CSV/TXT文件
- 格式设置:指定分隔符(如逗号),勾选「第一行作为表头」
- 该活动会输出包含所有映射规则的数组,每个元素包含
SourcePath和TargetPath字段
3. 用ForEach循环批量复制文件到临时容器
添加ForEach活动,配置如下:
- 迭代项:
@activity('Lookup映射表').output.value(替换为你的Lookup活动名称) - 并行度:根据文件数量调整(默认20,可按需增加)
- 循环内添加复制活动,配置:
- 源:Blob存储,文件路径设为
@item().SourcePath,即映射表中的原文件路径 - Sink:Blob存储的临时容器,文件路径设为
@item().TargetPath,即ZIP内需要的目标路径/文件名 - 启用「二进制复制」,避免文件格式转换
- 源:Blob存储,文件路径设为
4. 打包临时容器文件为ZIP
添加另一个复制活动,将临时容器的文件打包为ZIP:
- 源:临时容器,勾选「递归」,启用「二进制复制」
- Sink:目标Blob存储,设置最终ZIP文件的路径(如
output/result.zip) - 在Sink的「压缩」选项中,选择「Zip」,按需设置压缩级别
5. 清理临时容器(可选)
添加Delete活动,指向临时容器,勾选「递归」,删除所有临时文件,避免占用存储资源
关键说明
- 此方案完全基于ADF原生活动,无需外部资源,但需要临时存储中转文件
- 若文件数量极大,需注意ForEach并行度的上限(ADF默认最大并行度为50),避免触发存储账户的限流
内容的提问来源于stack exchange,提问作者João Martins
相关产品推荐
相关产品推荐

