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

如何在ADF中按指定格式存储容器内文件层级元数据至SQL表或CSV?

Azure Data Factory 提取多级文件夹文件层级元数据并存储

核心思路

通过ADF的Get Metadata活动获取文件夹子项,结合递归遍历实现多级文件夹的遍历,提取每个文件的完整路径后拆分出容器名、各级文件夹名和文件名,最后将格式化后的元数据输出到CSV文件或SQL表。

具体实现步骤

1. 配置存储账户链接服务与数据集

  • 创建Azure Blob Storage链接服务,关联目标存储账户,确保ADF具备容器访问权限。
  • 创建对应数据集:选择Azure Blob Storage类型,指定目标容器,文件夹路径设为loaded data(注意保留空格)。

2. 初始化管道变量

在目标管道中创建以下变量:

  • containerName:字符串类型,赋值为你的容器名称(例如my-target-container)。
  • currentFolderPath:字符串类型,初始值设为loaded data,用于存储当前遍历的文件夹路径。
  • metadataList:数组类型,用于收集所有文件的元数据条目。

3. 获取当前文件夹子项

添加Get Metadata活动:

  • 数据源选择步骤1创建的数据集,文件夹路径引用变量@variables('currentFolderPath')。
  • 勾选**子项(Child items)**选项,获取当前文件夹下所有文件和子文件夹。

4. 遍历子项并处理

添加ForEach活动:

  • 输入项设置为@activity('你的Get Metadata活动名称').output.childItems。
  • 可选:勾选顺序执行,避免多层文件夹并发遍历的冲突。

在ForEach内部添加分支逻辑:

分支1:递归遍历子文件夹

添加If Condition活动,条件表达式:@equals(item().type, 'Folder')

  • 条件成立时,添加Set Variable活动,更新currentFolderPath为@concat(variables('currentFolderPath'), '/', item().name)。
  • 调用当前管道自身(递归执行),继续遍历子文件夹内容。

分支2:提取文件元数据

当If Condition判断为文件(@equals(item().type, 'File'))时:

  • 添加Append To Variable活动,向metadataList数组添加格式化后的元数据对象,示例表达式:
    {
        "containerName": "@variables('containerName')",
        "folderLevel1": "@if(greater(length(split(concat(variables('currentFolderPath'), '/', item().name), '/')), 1), split(concat(variables('currentFolderPath'), '/', item().name), '/')[1], '')",
        "folderLevel2": "@if(greater(length(split(concat(variables('currentFolderPath'), '/', item().name), '/')), 2), split(concat(variables('currentFolderPath'), '/', item().name), '/')[2], '')",
        "folderLevel3": "@if(greater(length(split(concat(variables('currentFolderPath'), '/', item().name), '/')), 3), split(concat(variables('currentFolderPath'), '/', item().name), '/')[3], '')",
        "fileName": "@item().name"
    }
    
    注:若文件夹层级超过3级,可按相同格式添加folderLevelN字段,确保覆盖所有层级。

5. 输出元数据到目标存储

选项A:输出到CSV文件

  • 创建输出数据集:选择Azure Blob Storage类型,指定CSV文件的存储路径和文件名,格式设置中将分隔符改为|。
  • 添加Copy Data活动:
    • 源选择Inline Dataset,类型为JSON,数据引用@variables('metadataList')。
    • 目标选择创建的CSV数据集,映射containerName、folderLevel1等字段,执行后即可生成符合格式的CSV文件。

选项B:输出到SQL表

  • 创建SQL链接服务:关联目标SQL数据库,确保ADF具备表写入权限。
  • 创建目标SQL表,示例表结构:
    CREATE TABLE FileMetadata (
        ContainerName VARCHAR(255),
        FolderLevel1 VARCHAR(255),
        FolderLevel2 VARCHAR(255),
        FolderLevel3 VARCHAR(255),
        -- 按需添加更多层级字段
        FileName VARCHAR(255),
        LoadTime DATETIME DEFAULT GETDATE()
    )
    
  • 添加Copy Data活动:
    • 源同选项A,引用metadataList数组作为源数据。
    • 目标选择SQL数据集,映射对应字段,执行后元数据将写入SQL表。

注意事项

  • 递归管道需在设置中开启允许管道调用自身。
  • 若文件夹层级极深,需调整管道超时时间,避免执行中断。
  • 处理大量文件时,可开启ForEach的并发执行(根据存储账户性能调整并发数)。

内容的提问来源于stack exchange,提问作者vinod kumar reddy konda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:52