如何使用ADF复制活动对Blob存储中的文件按类型分类存放
ADF按文件类型分类存储到不同容器的可行实现方案
原if+or方案失效的常见原因
- 未做大小写统一处理:
.PNG、.Png等大小写后缀无法匹配预设规则 - 多
or拼接逻辑冗余易出错:多个or条件嵌套时优先级处理不当会导致判断失效 - 文件后缀提取错误:文件名包含多个
.时,错误取到第一个.后的内容而非最后一段
方案1:单个复制活动+动态目标容器(最简便,适合分类规则少的场景)
无需多分支判断,直接在目标数据集的容器字段配置动态表达式即可实现自动匹配:
- 首先在源数据集配置中开启文件路径列功能,选择输出文件名/完整路径,用于提取文件后缀
- 目标数据集的容器名称不写固定值,替换为动态表达式,参考写法:
@if( contains(createArray('jpeg','png'), toLower(split(item().name, '.')[-1])), 'ContainerA', if( contains(createArray('csv','xml','doc'), toLower(split(item().name, '.')[-1])), 'ContainerB', 'OtherContainer' ) )
说明:表达式中用
split(item().name, '.')[-1]提取文件最后一段后缀,toLower()统一转小写避免大小写匹配失败,contains()批量判断后缀是否在对应分类数组中,比多or拼接更简洁不易出错。
方案2:Get Metadata+Filter+分支复制(适合分类规则复杂、需对不同类型文件做额外处理的场景)
- 第一步添加
Get Metadata活动,连接源Blob存储,配置获取指定路径下所有子项的文件名列表,多层级目录需开启递归选项 - 第二步添加对应分类数量的
Filter活动,分别筛选不同类型的文件,以两类分类为例:- 图片类筛选条件:
contains(createArray('jpeg','png'), toLower(split(item().name, '.')[-1])) - 文档类筛选条件:
contains(createArray('csv','xml','doc'), toLower(split(item().name, '.')[-1]))
- 图片类筛选条件:
- 第三步在每个Filter活动的成功输出后接
ForEach活动,遍历筛选出的文件列表,分别复制到对应目标容器即可
内容的提问来源于stack exchange,提问作者Michelle Santos
相关产品推荐
相关产品推荐

