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

ADF从Blob Storage增量复制多文件到Azure SQL的同时间文件复制异常

Azure Data Factory多文件增量复制问题排查与修复

问题根源分析

  1. 并行执行导致变量覆盖:For Each活动默认是并行模式,多个分支同时修改全局变量PreviousModifiedDate和LatestFile,最终只有最后完成的分支会覆盖变量值,导致仅保留最后一个文件的信息。
  2. 条件判断逻辑遗漏:使用@greater(activity('Get Metadata2').output.lastModified, variables('PreviousModifiedDate'))仅筛选修改时间晚于基准时间的文件,忽略了等于基准时间的场景,若存在批量生成的同时间文件,后续文件会因不满足条件被跳过。
  3. 复制活动触发逻辑错误:Copy Data活动放在For Each外部,仅会执行一次,只能复制最后一个被记录到LatestFile的文件,无法遍历所有符合条件的文件。

修复步骤

1. 修改For Each执行模式为串行

在For Each活动的设置中,将并行度改为1,确保每个文件的处理按顺序执行,避免变量被并发覆盖。

2. 调整条件判断表达式

将If活动的判断表达式改为:

@greaterOrEquals(activity('Get Metadata2').output.lastModified, variables('PreviousModifiedDate'))

这样既包含修改时间晚于基准的文件,也包含同时间的文件,确保批量生成的同时间文件都能被筛选。

3. 调整Copy Data活动的位置

将Copy Data活动移动到For Each循环内部,放在If活动的“条件为真”分支中(Set Variable之后)。这样每筛选出一个符合条件的文件,就立即执行一次复制,确保所有符合条件的文件都能被复制到SQL数据库。

4. 优化变量更新逻辑(可选)

如果需要记录最新的修改时间,PreviousModifiedDate的更新可以直接设置为当前文件的修改时间(串行执行下,当前文件时间必然大于等于变量值):

@activity('Get Metadata2').output.lastModified

验证流程

  1. 重置PreviousModifiedDate为全量加载完成后的时间(或初始值1753-01-01 00:00:00.000)。
  2. 上传多个修改时间相同的测试文件到Blob Storage。
  3. 运行管道,检查SQL数据库是否接收到所有测试文件的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:15:20