如何配置Azure Data Factory作业按通配符分文件夹复制到ADLS
Azure Data Factory 按文件名前缀批量复制文件到对应文件夹配置步骤
以下是针对你需求的具体配置细节,基于你提到的ForEach + Switch + Copy Activity方案:
1. 基础准备:配置链接服务与数据集
- 源链接服务:创建指向ADLS Gen2源容器A的链接服务,确保权限足够(如
存储Blob数据参与者)。 - 源数据集:基于上述链接服务,设置文件系统为容器A,文件名留空或设为
*.txt(仅获取txt文件);建议添加参数FileName,后续动态传入当前遍历的文件名。 - 接收器链接服务:创建指向ADLS Gen2接收器容器B的链接服务。
- 接收器数据集:基于接收器链接服务,设置文件系统为容器B;添加参数
TargetFolder,后续动态指定目标子文件夹(如Folder_A/)。
2. 添加Get Metadata活动(获取源文件列表)
- 活动名称:
Get Source TXT Files - 配置:
- 数据源:选择刚才创建的源数据集(若数据集设了
*.txt,则自动过滤非txt文件) - 字段列表:勾选
Child Items,用来获取容器A下所有符合条件的文件数组。
- 数据源:选择刚才创建的源数据集(若数据集设了
3. 添加ForEach活动(遍历所有源文件)
- 活动名称:
Iterate Over Source Files - 配置:
- Items:输入表达式
@activity('Get Source TXT Files').output.childItems,遍历Get Metadata返回的文件列表。 - 并行度:默认20,可根据文件数量调整(若文件过多,建议适当降低避免存储并发限制)。
- 可选勾选
Sequential(需要按顺序复制时启用,否则并行复制)。
- Items:输入表达式
4. 在ForEach内添加Switch活动(判断文件名前缀)
- 活动名称:
Route File to Target Folder - 配置:
- On:输入表达式
@split(item().name, '-')[0],拆分文件名(如fileA-20240201.txt拆分后取第一个元素fileA),以此作为判断依据。 - 添加3个Case和1个默认Case:
Case 1:匹配
fileA- Case值:
fileA - 内部添加Copy Activity:
- 源配置:选择源数据集,给参数
FileName赋值@item().name,指定当前要复制的文件。 - 接收器配置:选择接收器数据集,给参数
TargetFolder赋值Folder_A/;文件名设置为@item().name(保留原文件名)。
- 源配置:选择源数据集,给参数
Case 2:匹配
fileB- Case值:
fileB - 内部Copy Activity配置:接收器参数
TargetFolder赋值Folder_B/,其余同Case1。
Case 3:匹配
fileC- Case值:
fileC - 内部Copy Activity配置:接收器参数
TargetFolder赋值Folder_C/,其余同Case1。
默认Case(处理不匹配的文件)
- 可添加
Set Variable活动,将不匹配的文件名记录到变量(如UnmatchedFiles),表达式示例:@concat(variables('UnmatchedFiles'), item().name, '; '),方便后续排查。
- Case值:
- On:输入表达式
5. 测试与验证
- 先上传少量测试文件到源容器A,触发管道运行。
- 检查接收器容器B的对应文件夹,确认文件是否正确复制;同时查看默认Case的变量记录(若有不匹配文件)。
内容的提问来源于stack exchange,提问作者Geezy
相关产品推荐
相关产品推荐

