如何从 ADF 中的执行管道获取输出参数?

How to get output parameter from Executed Pipeline in ADF?

我有一个可以提供输出的数据块管道,但目前,我需要 运行 来自已执行管道的数据块,当我尝试 运行 它时,我的数据块输出没有不会出现在已执行的管道上?这个管道不能显示输出吗?

这是我的 Databricks 输出结果。

[![在此处输入图片描述][1]][1]

这是我执行的管道。

如何从已执行的管道中获取 runOutput 结果?

数据块 activity 在子管道内。因此执行管道 activity 将不会显示子管道活动的输出属性。

您可以尝试这个解决方法,您可以将子管道的输出写入数据库 table。 输出意味着一个 blob 名称或将父 runID 写入 SQL table.

通过执行此操作,父管道将获得参考以获取输出。

您可以使用 Azure REST API 查询 activity 运行s,因此您可以执行 API 调用以获取最后一个管道 运行 您感兴趣的管道。然后使用这些详细信息调用另一个 REST API 以获得您感兴趣的管道 运行ID 的 Activity 输出。

此方法的好处是无需将输出写入文件或数据库,您只需在 ADF 的 Azure Monitor 日志中查找 activity 的输出即可。它还可用于从完全不同的数据工厂获取 activity 输出。

您实际上可以参考此 post 来展示如何使用 Azure REST API for ADF 查询管道和 activity 运行s:

Azure data factory and Log analytics

这里的重要部分是 body 和 ope运行ds:

这是关于如何使用查询管道的 Microsoft 文档 API:

https://docs.microsoft.com/en-us/rest/api/datafactory/pipeline-runs/query-by-factory

这里是关于如何查询 activity API:

的 Microsoft 文档

https://docs.microsoft.com/en-us/rest/api/datafactory/pipeline-runs/query-by-factory

所以您可以做的是找到 运行 使用管道 API 的 child 管道的管道 运行ID,然后使用它来查询使用 Activity API.

在该管道内执行特定 activity

实例:

Parent管道:

Child管道:

使用 Web 请求获取 Child 管道的最后一个管道 运行:

URL:

https://management.azure.com/subscriptions/@{pipeline().parameters.SubscriptionId}/resourceGroups/@{pipeline().parameters.ResourceGroupName}/providers/Microsoft.DataFactory/factories/@{pipeline().DataFactory}/queryPipelineRuns?api-version=2018-06-01

BODY:

{
  "lastUpdatedAfter": "2018-06-16T00:36:44.3345758Z",
  "lastUpdatedBefore": "@{utcnow()}",
  "filters": [
    {
      "operand": "PipelineName",
      "operator": "Equals",
      "values": [
        "@{pipeline().parameters.PipelineName}"
      ]
    },
    {
      "operand": "LatestOnly",
      "operator": "Equals",
      "values": [
        true
      ]
    }
  ]
}

要使用来自上一个 Web 调用的管道详细信息获取 Activity 输出:

URL:

https://management.azure.com/subscriptions/@{pipeline().parameters.SubscriptionId}/resourceGroups/@{pipeline().parameters.ResourceGroupName}/providers/Microsoft.DataFactory/factories/@{pipeline().DataFactory}/pipelineruns/@{activity('Get Last ChildPipeline Run Details').output.value[0].runId}/queryActivityruns?api-version=2018-06-01

BODY:

{
  "lastUpdatedAfter": "2018-06-16T00:36:44.3345758Z",
  "lastUpdatedBefore": "@{utcnow()}",
  "filters": [
    {
      "operand": "ActivityName",
      "operator": "Equals",
      "values": [
        "@{pipeline().parameters.ActivityName}"
      ]
    }
  ]
}

下面是 Parent 管道中使用上述过程的成功输出: