ADF get 属性 "status": "Succeeded" 和 IF 进行验证

ADF get property "status": "Succeeded" and IF for validation

我有一个管道,可以从外部提取数据并作为分段汇入 SQL 服务器 table。使用 4 'Copy data' 获取原始数据的过程已经成功。因为列数太多(250列),所以我拆分了。 下一个要求通过获得成功状态来验证 4 那些 'Copy data'。 'Copy data' 的输出看起来像这样

    {
    "dataRead": 4772214,
    "dataWritten": 106918,
    "sourcePeakConnections": 1,
    "sinkPeakConnections": 1,
    "rowsRead": 1366,
    "rowsCopied": 1366,
    "copyDuration": 8,
    "throughput": 582.546,
    "errors": [],
    "effectiveIntegrationRuntime": "AutoResolveIntegrationRuntime (Southeast Asia)",
    "usedDataIntegrationUnits": 4,
    "billingReference": {
        "activityType": "DataMovement",
        "billableDuration": [
            {
                "meterType": "AzureIR",
                "duration": 0.016666666666666666,
                "unit": "DIUHours"
            }
        ]
    },
    "usedParallelCopies": 1,
    "executionDetails": [
        {
            "source": {
                "type": "RestService"
            },
            "sink": {
                "type": "AzureSqlDatabase",
                "region": "Southeast Asia"
            },
            "status": "Succeeded",
            "start": "2022-04-13T07:16:48.5905628Z",
            "duration": 8,
            "usedDataIntegrationUnits": 4,
            "usedParallelCopies": 1,
            "profile": {
                "queue": {
                    "status": "Completed",
                    "duration": 4
                },
                "transfer": {
                    "status": "Completed",
                    "duration": 4,
                    "details": {
                        "readingFromSource": {
                            "type": "RestService",
                            "workingDuration": 1,
                            "timeToFirstByte": 1
                        },
                        "writingToSink": {
                            "type": "AzureSqlDatabase",
                            "workingDuration": 0
                        }
                    }
                }
            },
            "detailedDurations": {
                "queuingDuration": 4,
                "timeToFirstByte": 1,
                "transferDuration": 3
            }
        }
    ],
    "dataConsistencyVerification": {
        "VerificationResult": "NotVerified"
    },
    "durationInQueue": {
        "integrationRuntimeQueue": 0
    }
}

现在,我想获取 "status": "Succeeded"(JSON 输出)以在 'IF Condition' 中进行验证。因此,我在动态内容 @activity('copy_data_Kobo_MBS').output

中设置了来自变量的值

但是当它 运行 时,我得到了错误

The variable 'copy_Kobo_MBS' of type 'Boolean' cannot be initialized or updated with value of type 'Object'. The variable 'copy_Kobo_MBS' only supports values of types 'Boolean'.

问题是如何将 "status": "Succeeded"(JSON 输出)作为 'Variable' 值?所以 'IF condition' 可以检查 'Variable' 值。

您可以使用以下表达式从 copy data activity 中提取 运行 状态。由于您的变量是布尔类型,您需要使用 @equals() 函数对其进行评估,其中 returns truefalse.

@equals(activity('Copy data1').output.executionDetails[0].status,'Succeeded')

据了解,当您连接副本 activity 以在成功时设置变量 activity 时,您不必从副本数据 activity 中提取状态。

也就是说你的设置变量activity运行只有当你复制数据activity运行成功时才会

另外,请注意

  1. 如果 copy data activity(或任何其他 activity)失败,则添加的活动之前的activity成功输出后不会是运行ning.

  2. 并且如果您将超过 1 个 activity 输出连接到单个 activity,当所有连接的活动 运行.

  3. 您可以在失败或完成时添加活动以进一步处理。

示例:

在下面的片段中,Set Variable activity 不是 运行,因为复制数据不成功。并且 Wait2 activity 不是 运行 因为所有的输入活动都没有 运行 成功。