Compartir a través de

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

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

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

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

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

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

空管道画布的屏幕截图,其中选择了“变量”选项卡,并使用名为 TestVariable 的数组类型变量。

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

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

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

  4. 选择 Name 属性的变量。

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

“设置变量”活动的 UI 的屏幕截图。

使用 UI 设置管道返回值

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

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

包含 ExecutePipeline 活动的屏幕截图。

Type 属性

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

递增变量

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

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

屏幕截图显示了定义变量。

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

屏幕截图显示递增变量。

{
    "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 活动中被修改时,可能会导致意外的、你不希望其出现的行为。

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