You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Data Factory多子文件夹递归复制至单文件夹同名文件问题

Azure Data Factory V2 实现多子文件夹文件平级复制(保留原文件名)

方案1:Get Metadata + ForEach + Copy Activity(自定义文件名映射)

核心是绕过ADF默认的文件命名逻辑,手动指定目标文件名与源文件名一致,步骤如下:

  • Get Metadata 活动:配置源数据集为根文件夹,勾选Child items选项,获取所有子文件夹及文件的元数据列表。
  • Filter 活动(可选):添加Filter活动,筛选元数据中type为File的项,只保留文件对象,避免遍历空文件夹。
  • ForEach 活动:遍历筛选后的文件列表,内部添加Copy Activity:
    • 源数据集:用动态内容@item().path指定单个文件的完整路径。
    • 目标数据集:配置为目标根文件夹,文件名字段使用动态内容@item().name,强制目标文件使用源文件的原始名称。
  • 重名处理:若存在重名文件,可在文件名动态内容中添加前缀(如@concat(split(item().path, '/')[sub(length(split(item().path, '/')),2)], '_', item().name)),或在Copy Activity的Conflict resolution中选择Overwrite/Fail,按需配置。

方案2:Azure Function 配合ADF执行

如果ADF原生组件灵活性不足,用Azure Function实现更直接:

  • 编写Azure Function:用C#或Python编写函数,逻辑为:遍历源存储容器根文件夹下所有层级的文件,逐个复制到目标容器根文件夹并保留原文件名,同时处理重名逻辑(覆盖、重命名或报错)。
  • ADF调用Function:在管道中添加Azure Function活动,传入源根路径、目标根路径等参数,触发函数执行即可。

方案3:Data Flow 批量平级复制

针对大数量文件,用Data Flow批量处理效率更高:

  • Source 数据集:配置源根文件夹,Wildcard paths填写**(匹配所有层级子文件夹),读取所有文件。
  • 派生列转换:添加派生列,用表达式@split($$FilePath, '/')[last()]提取源文件的原始名称,命名为FileName。
  • Sink 数据集:配置目标根文件夹,关闭Preserve hierarchy,File name option选择As data in column,并指定用FileName列作为目标文件名。

原方法失败原因说明

  • 方法1的Flatten模式自动重命名,是因为默认采用了带层级前缀的文件名生成逻辑,手动指定@item().name即可覆盖。
  • 方法2嵌套ForEach未成功,大概率是未正确提取单个文件的原始名称,或未在Copy Activity中覆盖默认的文件名规则。

内容的提问来源于stack exchange,提问作者Pranjal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:10:23