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

如何在ADF管道中实现ADLS文件分批处理:每次处理10个

在Azure Data Factory中实现ADLS文件批量分批处理(每批10个)

针对ADLS文件夹中47个文件分5批处理(前4批10个,最后1批7个)的需求,无法用Filter活动实现数量分片的问题,可通过以下步骤用ADF原生组件完成:

步骤1:获取所有文件列表

添加Get Metadata活动,配置指向目标ADLS文件夹:

  • 勾选Get child items选项,获取文件夹下所有子项(文件+文件夹)
  • 后续可添加Filter活动,仅保留文件:设置过滤条件为@equals(item().type, 'File'),将输出的Items存入数组变量allFiles

步骤2:初始化变量

在管道级别创建以下变量:

  • allFiles:数组类型,存储过滤后的所有文件列表
  • batchSize:整数类型,值设为10(每批处理的文件数)
  • totalBatches:整数类型,用表达式计算总批次数:
    @ceil(length(variables('allFiles')) / variables('batchSize'))
    
    47个文件时,计算结果为5,符合需求
  • currentBatch:整数类型,初始值设为0(跟踪当前处理的批次索引,从0开始)

步骤3:用Until活动循环处理所有批次

添加Until活动,设置终止条件为:

@greaterOrEquals(variables('currentBatch'), variables('totalBatches'))

该条件会在处理完所有批次后终止循环。

Until活动内部逻辑

  1. 提取当前批次的文件
    添加Set Variable活动,创建数组变量currentBatchFiles,用slice函数截取对应批次的文件:

    @slice(variables('allFiles'), variables('currentBatch') * variables('batchSize'), add(variables('currentBatch'), 1) * variables('batchSize'))
    
    • 第1批(currentBatch=0):截取索引0-9的10个文件
    • 第4批(currentBatch=3):截取索引30-39的10个文件
    • 第5批(currentBatch=4):截取索引40到数组末尾的7个文件(自动适配剩余数量)
  2. 处理当前批次文件
    添加ForEach活动,遍历currentBatchFiles,在循环内部添加你的文件处理逻辑(如Copy Data、Data Flow、存储过程调用等)。

  3. 更新批次索引
    添加Set Variable活动,将currentBatch的值加1:

    @add(variables('currentBatch'), 1)
    

为什么Filter活动无法实现?

Filter活动仅能根据文件的属性(如名称、修改时间、大小)设置过滤规则,无法直接按“指定数量分片”的逻辑划分文件批次,因此需要通过数组切片的方式实现分批。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:50:25