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

Azure Data Factory V2:如何仅重跑失败活动/数据集及复制失败的表?

解答:Azure Data Factory V2 中重跑失败活动/表的方案

针对你提出的两个问题,我整理了实际项目中常用的可行方案,都是经过验证的实用方法:


问题1:仅重跑包含失败活动或数据集的管道

方法1:手动重跑(快速解决单次失败)

当管道运行失败后,直接在ADF的监控页面找到对应的运行记录,点击「重跑」按钮,在弹出的选项里选择**「失败的活动」**。这个选项会自动识别管道中失败的活动及其依赖链里需要重新执行的环节,只运行这些部分,而非整个管道,非常适合临时的单次失败场景。

方法2:自动化重跑(适配批量/周期性失败)

如果需要自动触发失败活动的重跑,可以结合Azure Monitor + Logic Apps实现:

  1. 在Azure Monitor中创建警报规则,触发条件设为「Data Factory 活动失败」;
  2. 当警报触发时,调用Logic App;
  3. 在Logic App中调用ADF的REST API,指定仅重跑失败的活动。API调用示例如下:
    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/pipelineruns/{runId}/rerun?api-version=2018-06-01
    
    请求体设置:
    {
      "rerunFailedActivities": true
    }
    

问题2:遍历表复制失败后,仅重跑失败的表

这个场景需要先记录失败的表,再针对性处理,具体步骤如下:

步骤1:添加失败日志记录逻辑

在你的复制活动的失败分支(通过活动的「完成后」设置分支条件)中,添加一个日志记录活动:

  • 可以用「存储过程活动」把失败的表名、错误信息、运行时间写入SQL数据库的日志表;
  • 也可以用「Copy活动」把失败信息写入ADLS的CSV/JSON日志文件。
    动态内容示例:获取当前处理的表名可以用@activity('你的复制活动名称').output.source.tableName(根据你的管道实际输出调整)。

步骤2:修改管道运行逻辑,只处理失败表

下次运行管道时,先读取日志表中的失败表列表,再只遍历这些表:

  1. 用「Lookup活动」读取日志表,筛选出状态为「失败」的表名;
  2. 把Lookup的输出作为「ForEach活动」的输入,只循环处理这些失败的表;
  3. 当复制成功后,记得更新日志表,把对应表的状态改为「成功」,避免重复处理。

进阶优化:参数化子管道

把复制单个表的逻辑封装成参数化子管道(参数为表名),主管道负责遍历所有表并调用子管道。当子管道失败时,主管道记录失败的表名。之后你可以:

  • 直接手动触发子管道,传入失败的表名;
  • 或者让主管道在下次运行时自动读取失败表列表,批量调用子管道处理。

额外提示

  • 在复制活动中设置重试策略(比如重试3次,间隔1分钟),可以减少临时网络波动导致的失败,降低重跑需求;
  • 日志表建议包含字段:table_name、run_status(成功/失败)、run_time、error_message,方便后续排查和筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:24:10