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

Azure Data Factory 管道批量处理:如何统计文件大小按2GB批次迁移本地文件到ADLS

ADF中按文件大小批量分组上传ADLS的实现方案(含文件总大小计算逻辑)

1 前置步骤:获取所有文件的元数据

  • 首先使用Get Metadata活动,关联本地文件存储的链接服务,数据集选择对应的本地文件夹路径,在活动配置的字段列表中勾选子项列表(Child Items)和大小(Size),即可拉取到目标路径下所有文件的文件名、单文件大小(单位为字节)数据。
  • 若本地路径包含子文件夹,额外勾选*递归(Recursive)*选项即可遍历所有层级的文件。

2 文件总大小计算与分批的两种实现方式

方案1:ForEach循环累加(轻量化场景首选,无需额外资源)

  • 先在管道中初始化3个变量:
    • 当前批次文件列表:Array类型,默认值为空
    • 所有批次分组结果:Array类型,默认值为空
    • 当前批次总大小:Long类型,默认值为0
  • 将Get Metadata返回的Child Items数组作为For Each活动的输入,必须勾选顺序执行(Sequential),禁止并行执行避免累加逻辑出错。
  • For Each内部按以下逻辑配置:
    1. 计算当前文件加入后批次的总大小:@add(variables('当前批次总大小'), item().size)
    2. 若计算结果小于2147483648(即2GB对应的字节数):
      • 用Append variable活动将当前文件名追加到当前批次文件列表
      • 用Set variable活动将当前批次总大小更新为刚才的计算值
    3. 若计算结果大于等于2147483648:
      • 先将当前的当前批次文件列表追加到所有批次分组结果
      • 重置当前批次文件列表为仅包含当前遍历的文件,重置当前批次总大小为当前文件的size
  • For Each循环结束后额外加一步判断:如果当前批次文件列表不为空,将最后一批未满2GB的文件也追加到所有批次分组结果,避免遗漏文件。

方案2:映射数据流聚合计算(适合文件数量过千的高性能场景)

  • 先通过Get Metadata拉取所有文件元数据,用Set variable活动存储Child Items数组。
  • 新建映射数据流,源选择缓存源(Cache Source),将刚才存储的数组作为源输入,映射name(文件名)和size(文件大小)两个字段。
  • 添加窗口转换(Window Transformation),排序规则可按文件名/文件创建时间排序,用累加聚合函数计算每个文件对应的累计总大小:sum(size) over (order by name rows between unbounded preceding and current row)。
  • 添加派生列转换,计算每个文件所属的批次号:floor(累计总大小 / 2147483648)。
  • 最后添加聚合转换,按批次号分组,将同批次的文件名聚合为数组,直接就能得到所有符合大小要求的文件分组,无需循环遍历,大批量文件场景下效率远高于ForEach方案。

3 后续流程调用

拿到所有批次分组结果后,再用一个For Each活动遍历每个批次的文件列表,调用复制活动或者子管道,将对应批次的文件复制到ADLS即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:02