Compartir a través de

在 Azure 数据工厂和 Azure Synapse Analytics 中设置管道返回值

适用于:Azure 数据工厂 Azure Synapse Analytics

在调用管道子管道范例中,可以使用设置变量活动将值从子管道返回到调用管道。 在以下方案中,有一个通过执行管道活动运行的子管道。 我们想要从子管道检索信息,然后在调用管道中使用这些信息。

显示 ExecutePipeline 活动的屏幕截图。

引入管道返回值,它是键值对的字典,用于在子管道和父管道之间实现通信。

先决条件 - 调用子管道

作为先决条件,你的设计需要一个调用子管道的执行管道活动,并且该活动上启用了“等待完成”。

将 ExecutePipeline 活动设置为等待完成的屏幕截图。

在子管道中配置管道返回值

我们已扩展设置变量活动以包含系统变量“管道返回值”。 不需要在管道级别定义这些变量(与在管道中使用的任何其他变量不同)。

  1. 在管道“活动”窗格中搜索“Set Variable”,然后将 Set Variable 活动拖动到管道画布上。
  2. 选择画布上的“设置变量”活动(如果尚未选择)及其“变量”选项卡,以编辑其详细信息。
  3. 选择“管道返回值”作为变量类型。
  4. 选择“新建”以添加新的键值对。
  5. 可以添加的键值对数仅受返回的 JSON 的大小限制 (4MB) 限制。

屏幕截图显示了管道返回值的 UI。

对于值类型,可以使用几个选项,包括

类型名称 说明
字符串 常量字符串值。 例如:'ADF is awesome'
Expression 它允许引用先前活动的输出。 可以使用此处的字符串内插来包括内联表达式值,如 "The value is @{guid()}"
数组 它需要一个字符串值数组。 按 Enter 键分隔数组中的值
布尔 是或否
Null 信号占位符状态;该值为常量 null
Int 整数类型的数值。 例如:42
浮点 浮点类型的数值。 例如:2.71828
Object 警告:仅适用于复杂用例。 用于为值嵌入键值对类型的列表

对象类型的值定义如下:

[{"key": "myKey1", "value": {"type": "String", "content": "hello world"}}, 
 {"key": "myKey2", "value": {"type": "String", "content": "hi"}}
]

在调用管道中检索值

子管道的管道返回值将成为执行管道活动的活动输出。 可以使用 @activity('Execute Pipeline1').output.pipelineReturnValue.keyName 检索信息。 用例没有限制。 例如,可以使用

  • 使用子管道中的 int 值来定义等待活动的等待期限。
  • 用于定义 Web 活动 URL 的 string 值。
  • 脚本活动的表达式值有效负载用于日志记录目的。

显示调用管道的屏幕截图。

在引用管道返回值方面有两个值得注意的地方。

  1. 使用对象类型时,可以进一步扩展到嵌套的 json 对象,例如 @activity('Execute Pipeline1').output.pipelineReturnValue.keyName.nextLevelKey
  2. 使用数组类型时,可以使用 @activity('Execute Pipeline1').output.pipelineReturnValue.keyName[0] 指定列表中的索引。 该数字的索引以零为基础,即从 0 开始。

注意

请确保引用的 keyName 存在于子管道中。 ADF 表达式生成器无法为你确认引用检查。 如果有效负载中缺少引用的键,管道将失败

特殊注意事项

  • 虽然可以在一个管道中包含多个“设置管道返回值”活动,但必须确保该管道中只执行其中一个活动。

    显示管道返回值和分支的屏幕截图。

    为避免出现上述在调用管道中缺少键的情况,建议你对子管道中的所有分支都使用相同的一组键。 考虑在特定分支中为没有值的键使用 null 类型。

  • Azure 数据工厂表达式语言不直接支持内联 JSON 对象。 相反,必须正确连接字符串和表达式。

    例如,对于以下 JSON 表达式:

    {
      "datetime": "@{utcnow()}",
      "date": "@{substring(utcnow(),0,10)}",
      "year": "@{substring(utcnow(),0,4)}",
      "month": "@{substring(utcnow(),5,2)}",
      "day": "@{substring(utcnow(),8,2)}"
    }
    

    等效 Azure 数据工厂表达式将为:

    @{
      concat(
        '{',
        '"datetime": "', utcnow(), '", ',
        '"date": "', substring(utcnow(),0,10), '", ',
        '"year": "', substring(utcnow(),0,4), '", ',
        '"month": "', substring(utcnow(),5,2), '", ',
        '"day": "', substring(utcnow(),8,2), '"',
        '}'
      )
    }
    

详细了解其他相关的控制流活动: