如何在ADF中根据文件名创建对应文件夹
在Azure Data Factory中按文件名前缀分类存储文件
问题场景
现有以下CSV文件:
ABCD_12234.csv ABCD_56789.csv CDE_EFG_123456.csv CDE_EFG_786542.csv
需要按规则归档:前缀为ABCD的文件存入ABCD文件夹,前缀为CDE_EFG的文件存入CDE_EFG文件夹,以下是两种在ADF中实现的方案:
方案一:复制活动+动态内容(快速实现)
这种方式无需复杂转换,适合批量文件的直接分类迁移:
- 配置源数据集:创建指向存储文件的容器/根路径的数据集,将文件路径设置为通配符(如
*.csv),确保能读取所有目标文件。 - 配置目标数据集:创建同一存储账户下的数据集,将文件夹路径设置为动态表达式,直接匹配文件名前缀:
该表达式会自动判断当前文件名的前缀,返回对应的文件夹名称。@if(startsWith(item().Name, 'ABCD_'), 'ABCD', if(startsWith(item().Name, 'CDE_EFG_'), 'CDE_EFG', '')) - 设置复制活动:
- 源选项卡:勾选"递归"(如果文件在子目录),选择"从数据集获取文件列表";
- 目标选项卡:将文件命名设置为
@item().Name,保留原文件名;
- 执行管道:运行后所有文件会自动分类写入对应文件夹。
方案二:数据流(灵活扩展)
如果后续需要对文件内容做处理,或者有更复杂的分类规则,推荐使用数据流:
- 创建源数据流:添加源数据集指向文件存储路径,启用"通配符文件路径"读取所有CSV文件。
- 派生列获取目标文件夹:添加"派生列"转换,新增
FolderName列,表达式为:
这里的iif(startsWith(Name, 'ABCD_'), 'ABCD', iif(startsWith(Name, 'CDE_EFG_'), 'CDE_EFG', ''))Name是数据流自动提取的原文件名字段。 - 条件拆分数据流:添加"条件拆分"转换,根据
FolderName的值拆分出ABCD、CDE_EFG两个分支(可忽略其他分支)。 - 配置目标输出:
- 为每个分支添加目标数据集,分别指向
ABCD和CDE_EFG文件夹; - 或者使用单个目标数据集,将文件夹路径设置为参数化值
@dataset().FolderName,在每个分支的目标设置中传递对应的FolderName值;
- 为每个分支添加目标数据集,分别指向
- 运行数据流:将数据流加入管道执行,完成文件分类存储。
内容的提问来源于stack exchange,提问作者Athiya
相关产品推荐
相关产品推荐

