如何在Azure Data Factory中读取存储第三层级CSV文件并逐一处理
在Azure Data Factory中批量处理指定层级文件的实现方案
核心思路
通过分层遍历+参数化数据集的原生ADF组件组合,逐层定位到Category层级下的CSV文件,同时获取文件路径与名称,既避免递归扫描的性能损耗,又无需依赖Azure函数等额外资源,满足差异化处理需求。
具体操作步骤
1. 创建参数化的Blob存储数据集
创建指向存储账户Inbound容器的Blob数据集,添加3个自定义参数:
MarketFolder:传递Market层级文件夹名称(如Market 1)CategoryFolder:传递Category层级文件夹名称(如Category 1)FileName:传递目标CSV文件名
在数据集的连接配置中,设置文件路径表达式为:
Inbound/@{dataset().MarketFolder}/@{dataset().CategoryFolder}/@{dataset().FileName}
2. 获取所有Market层级文件夹
添加Get Metadata活动,配置如下:
- 数据源:使用无参数的基础Blob数据集,指向
Inbound容器 - 勾选子项选项,设置递归为
否,仅获取Inbound下直接的Market文件夹列表 - 输出:将活动返回的
childItems结果存入数组变量(如varMarketFolders)
3. 遍历每个Market文件夹
添加ForEach活动,迭代项设为@variables('varMarketFolders')(可勾选顺序执行控制并发),内部执行以下操作:
3.1 获取当前Market下的Category文件夹
添加第二个Get Metadata活动:
- 数据源:使用基础Blob数据集,路径设为
Inbound/@{item().name} - 勾选子项,递归设为
否,获取当前Market下的Category文件夹列表 - 输出:将
childItems存入数组变量(如varCategoryFolders)
3.2 遍历每个Category文件夹
添加第二个ForEach活动,迭代项设为@variables('varCategoryFolders'),内部执行以下操作:
3.2.1 获取Category下的CSV文件
添加第三个Get Metadata活动:
- 数据源:使用基础Blob数据集,路径设为
Inbound/@{item().parent.name}/@{item().name} - 勾选子项,递归设为
否,获取该Category下的所有CSV文件 - 输出:将
childItems存入数组变量(如varFiles)
3.2.2 逐个处理文件
添加第三个ForEach活动,迭代项设为@variables('varFiles'),内部添加自定义处理逻辑(如数据流、Lookup等):
- 调用步骤1创建的参数化数据集,传入参数:
MarketFolder:@{item().parent.parent.name}CategoryFolder:@{item().parent.name}FileName:@{item().name}
- 通过
item().path直接获取文件完整路径,结合If Condition活动实现差异化处理(比如根据Market/Category名称分支执行不同逻辑)
方案优势
- 性能优化:分层非递归扫描,仅获取当前层级内容,避免全量递归的性能损耗
- 原生实现:全程使用ADF内置组件,无需额外资源依赖
- 灵活性强:通过文件路径与名称参数,可快速定制不同Market/Category下的专属处理逻辑
内容的提问来源于stack exchange,提问作者Mohit Leekha
相关产品推荐
相关产品推荐

