基于文件名在Azure Data Factory中批量复制文件至多文件夹
使用Azure Data Factory实现ADLS Gen2文件按名称分类复制
前提准备
已在ADF中配置好源ADLS Gen2链接服务和目标ADLS Gen2链接服务,分别对应源存储账户与目标存储账户。
方法一:管道+ForEach循环(适合中小规模文件)
步骤1:创建源数据集
- 选择ADLS Gen2数据集类型,关联源链接服务
- 设置文件路径为
Source/*/*.txt,用通配符匹配所有日期子文件夹及其中的txt文件 - 勾选「递归」选项,确保遍历所有层级的子文件夹
步骤2:创建目标数据集
- 选择ADLS Gen2数据集类型,关联目标链接服务
- 文件夹路径使用动态表达式:
该表达式会从文件名(如@concat('Target/', split(item().name, '_')[0])A_20221212.txt)中提取前缀A,自动生成/复用Target/A文件夹(不存在则自动创建) - 文件名设置为
@item().name,保留原文件名
步骤3:构建管道
- 添加Get Metadata活动(命名为
GetSourceFiles)- 关联源数据集,勾选「子项」选项,获取所有源文件的元数据列表
- 添加ForEach活动,将其输入关联到
GetSourceFiles的输出- 设置「项目」为
@activity('GetSourceFiles').output.childItems,遍历所有获取到的文件
- 设置「项目」为
- 在ForEach活动内部添加Copy Data活动
- 源端:关联源数据集,文件路径动态设置为
@concat('Source/', item().folder, '/', item().name),精确定位单个源文件 - 目标端:关联目标数据集,此时会自动根据文件名前缀生成目标文件夹并复制文件
- 源端:关联源数据集,文件路径动态设置为
方法二:映射数据流(适合大规模文件批量处理)
步骤1:创建源数据集
- 选择ADLS Gen2数据集类型,关联源链接服务
- 设置文件路径为
Source,勾选「递归」和「通配符文件路径」,通配符设为*.txt
步骤2:构建映射数据流
- 添加源转换,关联上述源数据集,获取所有源文件
- 添加派生列转换,新增列
TargetFolder,表达式为:
提取文件名前缀作为目标文件夹名称split(name, '_')[0] - 添加接收器转换,关联目标ADLS Gen2数据集
- 在「设置」页签,将「文件夹路径」设置为
Target/{TargetFolder},引用派生的TargetFolder列 - 文件名保留默认的
name,即原文件名
- 在「设置」页签,将「文件夹路径」设置为
步骤3:运行数据流
将数据流添加到管道中并触发运行,即可批量完成文件的分类复制
内容的提问来源于stack exchange,提问作者ALK
相关产品推荐
相关产品推荐

