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

新手求助:如何通过REST API获取ADF Pipeline的运行状态?

问题描述

我是Azure Data Factory(ADF)新手,想通过REST API检查Pipeline A是否在运行。写了一段WebActivity代码,但不知道该传哪些参数,也搞不懂怎么通过这个活动获取运行状态,触发后根本拿不到输出结果。查过相关文档但问题没解决,后续还要根据Pipeline的运行状态走IF ELSE逻辑。

原代码如下:

"name": "get pipeline A runs",
"description": "pipeline A runs.",
"type": "WebActivity",
"dependsOn": [
    {
        "activity": "Lookup1",
        "dependencyConditions": [
            "Succeeded"
        ]
    }
],
"policy": {
    "timeout": "0.12:00:00",
    "retry": 0,
    "retryIntervalInSeconds": 30,
    "secureOutput": false,
    "secureInput": false
},
"userProperties": [],
"typeProperties": {
    "url": "https://management.azure.com/subscriptions/xx/resourceGroups/yy/providers/Microsoft.DataFactory/factories/zz/queryPipelineRuns?api-version=2018-06-01",
    "method": "GET",
    "headers": {
        "Content-Type": "application/json"
    },
    "body": "()"
}
问题修正与实现步骤

先说说你代码里的几个关键问题:

  • 请求方法错了:queryPipelineRuns接口要求用POST,你用了GET,接口根本没法处理。
  • Body格式完全不对:这个接口需要传JSON格式的查询条件,你写的"()"完全无效,而且GET方法本来就不该带Body。
  • 权限没配置:WebActivity得有访问ADF管理API的权限,要么给ADF托管标识分配Data Factory Contributor角色,要么用服务主体认证(得在headers里加令牌)。

修正后的WebActivity代码

"name": "get pipeline A runs",
"description": "Check if Pipeline A is running",
"type": "WebActivity",
"dependsOn": [
    {
        "activity": "Lookup1",
        "dependencyConditions": [
            "Succeeded"
        ]
    }
],
"policy": {
    "timeout": "0.12:00:00",
    "retry": 0,
    "retryIntervalInSeconds": 30,
    "secureOutput": false,
    "secureInput": false
},
"userProperties": [],
"typeProperties": {
    "url": "https://management.azure.com/subscriptions/xx/resourceGroups/yy/providers/Microsoft.DataFactory/factories/zz/queryPipelineRuns?api-version=2018-06-01",
    "method": "POST",
    "headers": {
        "Content-Type": "application/json"
    },
    "body": {
        "lastUpdatedAfter": "@{adddays(utcnow(), -1)}",
        "lastUpdatedBefore": "@{utcnow()}",
        "filters": [
            {
                "operand": "PipelineName",
                "operator": "Equals",
                "values": ["PipelineA"]
            },
            {
                "operand": "Status",
                "operator": "Equals",
                "values": ["InProgress"]
            }
        ]
    },
    "authentication": {
        "type": "MSI",
        "resource": "https://management.azure.com/"
    }
}

关键参数说明

  • 请求方法改成POST,和接口要求匹配。
  • 请求体(Body):
    • lastUpdatedAfter和lastUpdatedBefore:限定查询时间范围,这里查最近1天的运行记录,你可以根据需要调整。
    • filters:指定要查的流水线名称(PipelineName填你的Pipeline A)和状态(Status设为InProgress就是查运行中的记录)。
  • 认证方式用MSI(托管标识):提前给ADF的托管标识在资源组或订阅级别分配Data Factory Contributor权限,这样WebActivity能自动获取令牌访问API,不用手动处理认证。

获取状态与IF ELSE逻辑实现

  • 拿输出结果:WebActivity的输出里会有匹配的运行记录,用表达式@activity('get pipeline A runs').output.value就能拿到结果数组。
  • 判断是否在运行:用length()函数判断数组长度,如果大于0,说明Pipeline A正在运行:
    @greater(length(activity('get pipeline A runs').output.value), 0)
    
  • 加IF ELSE分支:在ADF里添加If Condition活动,把上面的表达式作为条件:
    • 条件为真(数组长度>0):走“Pipeline正在运行”的逻辑。
    • 条件为假(数组长度=0):走“Pipeline没在运行”的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:47:47