通过Azure Data Factory从FTP站点获取压缩与非压缩文件——解压缩疑问
关于Azure Data Factory处理FTP混合文件的方案解答
你的思路完全没问题——用两个独立的复制活动分别处理压缩文件和非压缩文件是非常稳妥且易维护的方案,我先给你拆解这个方法的实操细节,再聊聊单活动处理的可行思路:
一、双复制活动方案的正确性与实操要点
这个方案逻辑清晰,是ADF处理混合文件类型的常规做法,具体步骤如下:
- 第一个复制活动:专门处理
.zip文件- 源数据集设置文件筛选器为
*.zip,确保只拉取ZIP格式文件 - 源数据集的压缩类型配置为
ZipDeflate,这样活动会自动解压ZIP内的内容到目标存储
- 源数据集设置文件筛选器为
- 第二个复制活动:处理
.csv、.xls等非压缩文件- 源数据集设置文件筛选器为
*.csv;*.xls(可根据实际需要添加更多类型) - 源数据集的压缩类型保持为
None,直接将文件原样复制到目标
- 源数据集设置文件筛选器为
这种方案的优势是逻辑简单,排查问题时能快速定位到对应活动,后续扩展其他文件类型也很方便。
二、单活动处理的可行方案
如果想追求流水线精简,也可以通过动态表达式+条件压缩配置实现单活动处理,步骤如下:
- 先通过
Get Metadata活动获取FTP站点的所有文件列表(设置字段为Child Items) - 在复制活动的源设置中,选择“文件列表”模式,引用
Get Metadata活动输出的文件列表 - 关键步骤:修改源数据集的压缩类型为动态内容,输入以下表达式:
这个表达式会自动判断当前遍历的文件后缀:如果是@equals(split(item().Name, '.')[sub(length(split(item().Name, '.')),1)], 'zip') ? 'ZipDeflate' : 'None'.zip就启用ZipDeflate解压,否则保持None不做解压操作
不过要注意,单活动方案的维护成本略高,后续如果新增特殊处理的文件类型,需要修改表达式;而且如果ZIP文件内有嵌套压缩的情况,单活动的处理逻辑会更复杂。所以如果不是对活动数量有严格要求,双活动方案会更省心。
内容的提问来源于stack exchange,提问作者that_girl
相关产品推荐
相关产品推荐

