Compartilhar via

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

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

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

含有 ExecutePipeline 活动的屏幕截图。

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

先决条件 - 调用子管道

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

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

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

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

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

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

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

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

对象类型的值定义如下:

[{"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), '"',
        '}'
      )
    }
    

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