ADF CopyActivity意外递归解压嵌套压缩包,求助保留嵌套压缩包方法
解决ADF解压主Zip时保留嵌套Zip的问题
问题原因
当你在源数据集启用Zip压缩配置时,ADF的CopyData活动会自动解压压缩包内的所有内容,包括识别到的嵌套Zip文件(这可能是ADF对文件扩展名的自动处理逻辑导致的递归解压),即便官方文档说明不支持嵌套解压,实际场景中仍可能因配置或文件结构触发该行为。
解决方案
方案1:取消源数据集压缩配置,用自定义脚本/函数手动解压外层Zip
这种方法能精准控制仅解压外层Zip,保留内部嵌套Zip:
- 步骤1:将源数据集设为二进制类型、无压缩配置,通过CopyData活动把主Zip文件复制到Blob存储的临时容器。
- 步骤2:添加自定义活动(或Azure Function活动),调用脚本执行外层解压:
- PowerShell脚本示例(仅解压外层,内部Zip会以原文件形式保留):
$sourceZip = "<临时存储的主Zip文件路径>" $targetDir = "<目标文件夹路径>" Expand-Archive -Path $sourceZip -DestinationPath $targetDir -Force - Python脚本示例:
import zipfile import os zip_path = "<临时存储的主Zip文件路径>" extract_path = "<目标文件夹路径>" os.makedirs(extract_path, exist_ok=True) with zipfile.ZipFile(zip_path, 'r') as zip_ref: zip_ref.extractall(extract_path)
- PowerShell脚本示例(仅解压外层,内部Zip会以原文件形式保留):
- 步骤3(可选):用CopyData活动将解压后的内容(包含嵌套Zip)复制到最终目标位置。
方案2:调整CopyData活动源配置(尝试规避递归解压)
若不想引入自定义活动,可尝试以下配置调整:
- 确保源数据集的递归选项设为
No,避免ADF遍历解压后的内容。 - 接收器数据集设为二进制类型、无压缩,目标路径指定为主Zip同名的文件夹。
- 若调整后仍出现递归解压,建议直接使用方案1,该方案更稳定可控。
关键注意点
- 源数据集启用Zip压缩时,ADF会自动处理所有压缩格式的文件内容,无法直接跳过嵌套Zip的解压,必须通过手动控制解压逻辑实现需求。
- 使用自定义脚本/函数时,需确保ADF拥有访问存储资源和执行脚本环境的足够权限。
内容的提问来源于stack exchange,提问作者iggi
相关产品推荐
相关产品推荐

