如何在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:整数类型,用表达式计算总批次数:
47个文件时,计算结果为@ceil(length(variables('allFiles')) / variables('batchSize'))5,符合需求currentBatch:整数类型,初始值设为0(跟踪当前处理的批次索引,从0开始)
步骤3:用Until活动循环处理所有批次
添加Until活动,设置终止条件为:
@greaterOrEquals(variables('currentBatch'), variables('totalBatches'))
该条件会在处理完所有批次后终止循环。
Until活动内部逻辑
提取当前批次的文件
添加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个文件(自动适配剩余数量)
处理当前批次文件
添加ForEach活动,遍历currentBatchFiles,在循环内部添加你的文件处理逻辑(如Copy Data、Data Flow、存储过程调用等)。更新批次索引
添加Set Variable活动,将currentBatch的值加1:@add(variables('currentBatch'), 1)
为什么Filter活动无法实现?
Filter活动仅能根据文件的属性(如名称、修改时间、大小)设置过滤规则,无法直接按“指定数量分片”的逻辑划分文件批次,因此需要通过数组切片的方式实现分批。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

