Azure Synapse中ADF复制活动:动态筛选Gen2数据湖含part的CSV文件
在Azure Synapse ADF中动态筛选并复制含“_part”的Gen2数据湖CSV文件
以下是几个直接落地的实用方案,针对你的需求优化:
方案1:Copy活动原生筛选(最简高效)
直接利用ADF Copy活动的原生文件匹配能力,无需额外活动:
- 配置源数据集时,在文件路径的「文件名」字段填入通配符模式:
*_part*.csv - 如果需要递归遍历所有子文件夹,勾选「递归」选项,同时将文件名模式改为
**/*_part*.csv(**表示任意层级的子目录) - 目标数据集保持CSV格式,直接指定目标容器/文件夹,ADF会自动保留原文件名完成复制
这个方案性能最优,适合无复杂附加逻辑的场景,是ADF原生支持的批量筛选复制方式。
方案2:Get Metadata + Filter + ForEach组合(灵活扩展)
如果需要结合文件大小、修改时间等额外条件筛选,用这个组合实现动态控制:
- Get Metadata活动:数据源指向源Gen2的目标文件夹,勾选「Child items」选项,获取该文件夹下所有文件/子文件夹的元数据
- Filter活动:输入设置为
@activity('Get Metadata').output.childItems,筛选条件写:
同时过滤文件类型和后缀,避免误选文件夹或非CSV文件@and(contains(item().name, '_part'), equals(item().type, 'File'), endsWith(item().name, '.csv')) - ForEach活动:输入设置为
@activity('Filter').output.value,循环内添加Copy活动:- 源数据集的文件路径用参数化配置,值设为
@item().name,指向筛选后的单个文件 - 目标数据集同样参数化文件名,保持原文件名和CSV格式
- 源数据集的文件路径用参数化配置,值设为
方案3:参数化筛选规则(便于维护)
如果后续可能调整筛选关键词,给管道添加参数(比如@pipeline().parameters.filterKeyword),然后把筛选条件改成@contains(item().name, pipeline().parameters.filterKeyword),这样修改筛选规则时不用改动管道逻辑,直接传参即可。
注意事项
- 确保源/目标Gen2的链接服务配置了足够权限(如Storage Blob Data Contributor或对应细粒度权限)
- 若文件数量超过10000,建议开启Copy活动的「并行复制」,根据存储性能调整并发数(默认20)
- 测试时先上传少量包含4类文件名的测试文件,验证筛选逻辑是否精准
内容的提问来源于stack exchange,提问作者Stone Carrier
相关产品推荐
相关产品推荐

