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

如何在ADF管道中递归复制文件至扁平目标并自定义文件名

解决方案:ADF实现多层级存储文件扁平化复制并自定义文件名前缀

核心思路

通过Get Metadata获取全量文件路径 + 动态表达式处理文件名 + Foreach循环批量复制,同时开启分块复制支持大文件,完美适配3/4级源目录结构。

具体步骤

  1. 获取所有源文件的完整路径

    • 创建Get Metadata活动,源数据集指向源存储的目标容器(比如示例中的B),勾选Child Items选项,这样能拿到所有文件的ItemPath(完整路径,如B/x/y/z/C)和Name(文件名,如C)。
  2. 编写动态表达式生成目标文件名
    针对每个文件,提取容器后的目录层级并替换为__,再拼接文件名:

    @join(range(1, length(split(item().ItemPath, '/'))-1), '__') + '__' + item().Name
    

    逻辑说明:

    • split(item().ItemPath, '/'):把完整路径拆成数组,比如B/x/y/z/C拆成['B','x','y','z','C']
    • range(1, length(...) -1):取容器之后、文件名之前的所有目录层级(索引1到倒数第2位)
    • join(..., '__'):把目录层级用__拼接
    • 最后加上__和原文件名,得到x__y__z__C
  3. Foreach循环批量复制文件

    • 把Get Metadata的Child Items作为Foreach的迭代项,设置Sequential为否(提高处理效率)
    • 循环内添加Copy活动:
      • 源数据集:动态指定单个文件路径,表达式为@item().ItemPath
      • 目标数据集:文件名用步骤2的动态表达式,目标容器选目标存储的对应容器
      • 复制活动设置:开启启用分块复制,块大小建议设为100MB(适配>10GB的大文件)

针对之前方案的优化点

之前用Get Metadata+Foreach失败,大概率是没处理好不同层级的路径逻辑,上述表达式不管是3级(B/a/b/D→a__b__D)还是4级路径都能自动适配,无需提前区分层级结构。

额外提示

如果文件量极大,可考虑用ADF数据流替代Foreach:

  • 用Get Metadata获取文件列表作为数据流源
  • 添加派生列生成目标文件名
  • Sink设置为扁平结构,文件名用派生列的值
  • 数据流同样支持大文件分块处理,适合超大规模文件复制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:12:39