Azure 数据工厂 select 属性 "status":来自上一个 activity 的 "Succeeded"

Azure Data Factory select property "status": "Succeeded" from previous activity

使用 Data Factory V2 我正在尝试实现从一个 Azure SQL 数据库到另一个数据库的数据流复制。

我想执行一个有条件的 activity If Condition 依赖于之前管道执行的活动是否成功,但是在表达式中要包含在 activity 中If Condition 我无法 select 输出 属性 "status": "Succeeded".

If Condition 的 activity 之前,我有两个数据复制活动。

我在流程中添加了 If Condition activity,因为复制数据后要执行的任务取决于 所有 复制活动的成功。

如果所有复制活动都正确执行,则将执行 true 条件。如果只有一个副本 activity 成功而另一个失败则执行 false 条件

每次复制活动的输出如下:

Output
{
    "dataRead": 213156,
    "dataWritten": 213156,
    "rowsRead": 3554,
    "rowsCopied": 3554,
    "copyDuration": 4,
    "throughput": 52.04,
    "errors": [],
    "effectiveIntegrationRuntime": "DefaultIntegrationRuntime (West Europe)",
    "usedDataIntegrationUnits": 4,
    "usedParallelCopies": 1,
    "executionDetails": [
        {
            "source": {
                "type": "AzureSqlDatabase"
            },
            "sink": {
                "type": "AzureSqlDatabase"
            },
            "status": "Succeeded",
            "start": "2018-10-02T13:42:37.7396813Z",
            "duration": 4,
            "usedDataIntegrationUnits": 4,
            "usedParallelCopies": 1,
            "detailedDurations": {
                "queuingDuration": 3,
                "preCopyScriptDuration": 0,
                "timeToFirstByte": 0,
                "transferDuration": 1
            }
        }
    ]
}

我为 If Condition activity 构建了我的表达式:

@and(equals(activity('Copy_Activity1').output.executionDetails[3],'Succeeded'), equals(activity('Copy_Activity2').output.executionDetails[3],'Succeeded'))

但是他给我以下错误:

"error": {
    "code": "InvalidTemplate",
    "message": "Unable to process template language expressions in action 'If Condition1' inputs at line '1' and column '1294': 'The template language expression 'and(equals(activity('Copy_Item_Budget_Name').output.executionDetails[3],'Succeeded'), equals(activity('Copy_Item_Budget_Entry').output.executionDetails[3],'Succeeded'))' cannot be evaluated because array index '3' is outside bounds (0, 0) of array. Please see https://aka.ms/logicexpressions for usage details.'."
}

但是即使有指导我也无法解决问题。

有谁知道如何解决这个问题?谢谢

为清楚起见,ADF 中的流量控制不是这样工作的。

您不需要查询之前形状的结果,而是根据结果更改 Activity 连接器以进行分支。

连接两个活动后,右击line/arrow。然后你可以选择 运行 下一个 Activity on Success, Failure, Completion or Skip.

您可以在其前后 link 任意数量的活动。

从输出数据来看,executionDetails是一个数组,只有一个项目包含一个对象。所以表达式应该是:activity('Copy_Activity1').output.executionDetails[0].status.

如果您的要求是在所有复制活动成功完成后运行一些活动,Johns-305 的回答实际上是正确的。

这是包含更多详细信息的示例。复制活动是activity 1activity 2,其他到运行的活动是activity 3activity 4activity 3和[=13之间没有依赖关系=].这些活动应如下图所示链接。请注意,activity 3activity 4 不会 运行 两次,它们只会在 之后 运行 activity 1activity 2 成功。