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

如何在ADF中获取结构不规则父文件夹下所有Parquet文件的元数据

在Azure Data Factory中获取不规则子文件夹下所有Parquet文件的元数据

如果你需要获取父文件夹下所有层级的Parquet文件元数据,有两种可行方案,可根据场景选择:

方案一:利用Get Metadata的递归特性(最简单)

ADF的Get Metadata活动默认仅遍历一级目录,但支持开启递归获取所有子层级内容:

  • 创建一个Get Metadata活动,数据源指向父文件夹Tommy
  • 在活动的字段列表中勾选childItems,用来获取所有子项
  • 进入数据源配置界面,找到并勾选Recursive选项(不同存储类型的位置略有差异:比如ADLS Gen2在数据集的连接设置中,Blob存储在活动的数据源参数里)
  • 运行活动后,childItems会返回Tommy下所有层级的文件和文件夹
  • 添加Filter活动,输入设置为@activity('Get Metadata活动名').output.childItems,过滤条件写@endsWith(item().name, '.snappy.parquet'),仅保留Parquet文件
  • 再添加Select活动,输入为Filter活动的输出,在映射中指定:
    • name:@item().name(若返回的不是完整路径,需拼接父文件夹路径,示例:@concat('Tommy/', item().name))
    • lastModified:@item().lastModified
  • 最终Select活动的输出就是你需要的JSON数组格式

方案二:递归遍历(适用于不支持递归的场景)

如果存储类型不支持Get Metadata的递归特性,或需要更灵活的逻辑,可以用Foreach+Get Metadata实现递归遍历:

  • 先创建一个数组类型的变量allParquetFiles,用来存储最终结果
  • 创建初始Get Metadata活动,获取Tommy下的一级子项(勾选childItems)
  • 添加Foreach活动,项设置为@activity('初始Get Metadata').output.childItems,开启顺序执行
  • 在Foreach内部添加If Condition活动,判断当前项是否为文件夹:@equals(item().type, 'Folder')
    • True分支(文件夹):添加另一个Get Metadata活动,数据源指向该子文件夹并获取其childItems,将这个输出作为新的遍历项,嵌套Foreach活动(或调用包含相同逻辑的管道实现递归)
    • False分支(文件):添加另一个If Condition,判断是否为Parquet文件:@endsWith(item().name, '.snappy.parquet'),如果是,使用Set Variable活动将文件元数据追加到allParquetFiles变量中,表达式示例:
      @concat(variables('allParquetFiles'), createArray(json(concat('{"name": "', concat('Tommy/', item().name), '", "lastModified": "', item().lastModified, '"}'))))
      
  • 遍历完成后,allParquetFiles变量中就存储了所有符合条件的文件元数据

注意事项

  • 确保存储账户的权限足够,ADF能访问所有子文件夹
  • 如果文件数量较多,可根据实际情况调整Foreach的并发数(顺序执行速度较慢,高并发需注意存储服务的限流)
  • 完整路径的拼接要准确,避免出现路径错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:22:43