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

Azure Data Factory如何递归获取嵌套JSON文件路径并遍历复制?

解决ADF中递归获取分层JSON文件路径并遍历复制的问题

针对你在Azure Data Factory中遇到的无法用Get Metadata递归获取container/../../year=2023/m=1/d=01/h=01/m=5/file.json这类分层文件路径的问题,给出以下几种可行方案:

方案1:正确配置Get Metadata + ForEach实现递归遍历

如果之前的Get Metadata未生效,大概率是配置细节没到位,按以下步骤调整:

  • 数据集配置:将源数据集的文件路径设置为通配符格式,比如 container/你的父路径/year=2023/**(**表示递归匹配所有子层级),或更精确的container/你的父路径/year=2023/*/*/*/*/*(匹配年→月→日→小时→5分钟的所有层级)
  • Get Metadata活动设置:
    1. 选择上述数据集作为源
    2. 在「字段」选项中勾选childItems
    3. 将「递归」开关设为True
  • ForEach活动遍历:
    1. 把ForEach的项设置为@activity('Get Metadata活动名称').output.childItems
    2. 在ForEach内部添加Copy活动,将源数据集的文件路径参数设为@item().path(或@item().name,根据实际返回字段调整),目标端按需配置

方案2:多层ForEach参数化遍历(适合结构固定的分层路径)

因为你的文件路径严格按年(固定2023)→月→日→小时→5分钟分层,可通过嵌套ForEach逐层枚举:

  1. 第一层ForEach(月份):项设为[1,2,3,4,5,6,7,8,9,10,11,12],遍历1-12月
  2. 第二层ForEach(天数):项用表达式动态生成对应月份的天数(2023是平年,2月取28天):
    @range(1, if(equals(item(),2),29,if(or(equals(item(),4),equals(item(),6),equals(item(),9),equals(item(),11)),31,32)))
    
  3. 第三层ForEach(小时):项设为@range(0,24),遍历0-23小时
  4. 第四层ForEach(5分钟间隔):项设为[0,5,10,15,20,25,30,35,40,45,50,55],遍历所有5分钟节点
  5. Copy活动参数化:在Copy活动的源数据集路径中,用表达式拼接完整路径:
    @concat('container/你的父路径/year=2023/m=', string(activity('第一层ForEach').items[activity('第一层ForEach').currentIndex]), '/d=', string(item()), '/h=', string(activity('第三层ForEach').items[activity('第三层ForEach').currentIndex]), '/m=', string(item()), '/file.json')
    
    (注意根据嵌套层级调整item()的引用)

方案3:用Lookup活动查询存储账户获取所有文件路径

如果是Blob Storage或ADLS Gen2,可通过Lookup活动执行查询获取所有文件路径:

  • Lookup活动配置:
    1. 源数据集选择你的存储账户,格式设为「CSV」(仅用于占位,实际不解析内容)
    2. 在「查询」选项中输入:
      SELECT name FROM OPENROWSET(
          BULK 'container/你的父路径/year=2023/**',
          FORMAT = 'CSV',
          FIELDTERMINATOR = '0x0b',
          FIELDQUOTE = '0x0b'
      ) WITH (name varchar(1000)) AS [result]
      
    3. 启用「递归」选项
  • 遍历复制:将ForEach的项设为@activity('Lookup').output.value,Copy活动源路径设为@item().name

方案4:Azure Function辅助获取文件路径

如果以上方法都不适用,可编写一个简单的Azure Function(如C#或Python),调用Azure Storage SDK递归遍历指定路径下的所有文件,返回路径列表:

  • Function逻辑:连接存储账户,遍历year=2023下的所有层级,收集所有file.json的完整路径
  • 在ADF中添加Web活动,调用这个Function,获取返回的路径数组
  • 将Web活动的输出传给ForEach,遍历执行Copy活动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:25:10