在 Azure 数据工厂和 Azure Synapse Analytics 中的“设置变量”活动

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

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

使用“设置变量”活动可设置数据工厂或 Synapse 管道中定义的字符串、布尔或数组类型的现有变量的值,或使用“设置变量”活动设置管道返回值(预览)。

使用 UI 创建“设置变量”活动

若要在管道中使用 Set Variable 活动,请完成以下步骤:

  1. 选择管道画布的背景,并使用“变量”选项卡添加变量:

Screenshot of an empty pipeline canvas with the Variables tab selected with an array type variable named TestVariable.

  1. 在管道“活动”窗格中搜索“Set Variable”,然后将 Set Variable 活动拖动到管道画布上。

  2. 在画布上选择“设置变量”活动(如果尚未选择),然后选择“设置”选项卡以编辑其详细信息。

  3. 为“变量类型”选择“管道变量”。

  4. 选择 Name 属性的变量。

  5. 输入表达式以设置变量的值。 该表达式可以是文本字符串表达式,也可以是动态表达式、函数系统变量其他活动的输出的任意组合。

Screenshot of the UI for a Set variable activity.

使用 UI 设置管道返回值

我们扩展了“设置变量”活动,以包含一个名为“管道返回值”的特殊系统变量,允许在以下场景中从子管道到调用管道的通信。

在使用变量之前,无需定义该变量。 有关详细信息,请参阅管道返回值

Screenshot with ExecutePipeline Activity.

Type 属性

属性 描述 必需
name 管道中活动的名称
description 描述活动用途的文本
type 必须设置为“SetVariable”
variableName 此活动设置的变量的名称
变量分配到的字符串文本或表达式对象值

递增变量

涉及变量的常见方案是将变量用作 UntilForEach 活动中的迭代器。 在“设置变量”活动中,无法引用在 value 字段中设置的变量,也就是说,不能进行自引用。 若要解决此限制,请设置一个临时变量,然后创建第二个“设置变量”活动。 第二个“设置变量”活动会将迭代器的值设置为临时变量。 下面是此模式的示例:

  • 首先定义两个变量:一个用于迭代器,一个用于临时存储。

Screenshot shows defining variables.

  • 然后,使用两个活动递增值

Screenshot shows increment variable.

{
    "name": "pipeline1",
    "properties": {
        "activities": [
            {
                "name": "Increment J",
                "type": "SetVariable",
                "dependsOn": [],
                "policy": {
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "variableName": "temp_j",
                    "value": {
                        "value": "@add(variables('counter_i'),1)",
                        "type": "Expression"
                    }
                }
            },
            {
                "name": "Set I",
                "type": "SetVariable",
                "dependsOn": [
                    {
                        "activity": "Increment J",
                        "dependencyConditions": [
                            "Succeeded"
                        ]
                    }
                ],
                "policy": {
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "variableName": "counter_i",
                    "value": {
                        "value": "@variables('temp_j')",
                        "type": "Expression"
                    }
                }
            }
        ],
        "variables": {
            "counter_i": {
                "type": "Integer",
                "defaultValue": 0
            },
            "temp_j": {
                "type": "Integer",
                "defaultValue": 0
            }
        },
        "annotations": []
    }
}

变量的范围在管道级别。 这意味着变量不是线程安全的,如果从并行迭代活动(如 ForEach 循环)中访问变量,尤其是当值也在该 foreach 活动中被修改时,可能会导致意外的、你不希望其出现的行为。

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