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

Posted

技术标签:

【中文标题】如何从 ADF 中的执行管道获取输出参数?【英文标题】:How to get output parameter from Executed Pipeline in ADF? 【发布时间】:2021-09-16 00:19:21 【问题描述】:

我有一个 databricks 管道可以提供输出,但目前,我需要从 Executed Pipelines 运行 databricks,当我尝试运行它时,我的 databricks 输出没有显示在 Executed Pipelines 上?这个管道不能显示输出吗?

这是我的 Databricks 输出结果。

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

这是我的执行管道。

如何从 Executed Pipeline 获得 runOutput 结果?

【问题讨论】:

【参考方案1】:

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

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

您实际上可以参考这篇文章来展示如何使用 Azure REST API for ADF 来查询管道和活动运行:

Azure data factory and Log analytics

这里重要的部分是主体和操作数:

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

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

这里是关于如何查询活动 API 的 Microsoft 文档:

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

因此,您可以做的是找到使用管道 API 运行的子管道的 Pipeline RunID,然后使用它来使用 Activity API 查询该管道中的特定活动执行。

真实例子:

父管道:

子管道:

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

网址:

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

身体:


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

使用来自先前网络调用的管道详细信息获取活动输出:

网址:

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

身体:


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

这是使用上述过程在父管道中的成功输出:

【讨论】:

【参考方案2】:

数据块活动在子管道内。所以执行管道活动不会显示子管道活动的输出属性。

您可以尝试解决此问题,您可以将子管道的输出写入数据库表。 输出意味着 Blob 名称或将父 runID 写入 SQL 表。

通过这样做,父管道将获得参考以获取输出。

【讨论】:

确实应该提供例子,否则就很模糊了。

以上是关于如何从 ADF 中的执行管道获取输出参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Blob 中的 CSV 文件在 SQL 数据库中创建一个表,其中包含通过数据流或 ADF 管道的所有列名及其数据类型?

在 ADF 中参数化 Azure Blob 存储链接服务

使用 Python 脚本的 ADF 管道中的 Azure 函数

ADF V2 - 基于表列参数化数据复制管道

如何从 azure ADF 管道运行 Azure CLI 命令?

如何使用 Azure 数据工厂中的每个活动合并文件