ADF从Blob Storage增量复制多文件到Azure SQL的同时间文件复制异常
Azure Data Factory多文件增量复制问题排查与修复
问题根源分析
- 并行执行导致变量覆盖:For Each活动默认是并行模式,多个分支同时修改全局变量
PreviousModifiedDate和LatestFile,最终只有最后完成的分支会覆盖变量值,导致仅保留最后一个文件的信息。 - 条件判断逻辑遗漏:使用
@greater(activity('Get Metadata2').output.lastModified, variables('PreviousModifiedDate'))仅筛选修改时间晚于基准时间的文件,忽略了等于基准时间的场景,若存在批量生成的同时间文件,后续文件会因不满足条件被跳过。 - 复制活动触发逻辑错误: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
验证流程
- 重置
PreviousModifiedDate为全量加载完成后的时间(或初始值1753-01-01 00:00:00.000)。 - 上传多个修改时间相同的测试文件到Blob Storage。
- 运行管道,检查SQL数据库是否接收到所有测试文件的数据。
内容的提问来源于stack exchange,提问作者gmp
相关产品推荐
相关产品推荐

