使用Data Factory V2,我正在尝试实现从一个Azure SQL数据库到另一个Azure SQL数据库的数据复制流。
我想执行条件活动If Condition
取决于管道先前执行的活动是否成功,但是在要包含在If Condition
活动中的表达式中,我无法选择输出属性"status": "Succeeded"
。
在If Condition
活动之前,我有两个数据复制活动。
我向流程中添加了If Condition
活动,因为复制数据后要执行的任务取决于所有复制活动的成功。
即
如果所有复制活动均正确执行,则将执行true条件。如果只有一个复制活动成功而另一个失败,则执行错误条件
每个复制活动的输出如下:
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
活动构建了这样的表达式:
@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.'."
}
但是即使有了指南,我也无法解决问题。
有人知道如何解决问题吗?谢谢
答案 0 :(得分:2)
从输出数据来看,executionDetails
是一个只有一个包含对象的项目的数组。因此表达式应为:activity('Copy_Activity1').output.executionDetails[0].status
。
答案 1 :(得分:0)
如果您的要求是在所有复制活动成功完成后运行某些活动,那么Johns-305的答案实际上是正确的。
这是带有更多详细信息的示例。复制活动为activity 1
和activity 2
,其他活动将在activity 3
和activity 4
之后运行,activity 3
和activity 4
之间没有依赖关系。活动应链接如下图。请注意,activity 3
和activity 4
不会运行两次,只有在activity 1
和activity 2
中的两者都运行之后,它们才会运行成功了。
答案 2 :(得分:-1)
为清楚起见,这不是ADF中流量控制的工作原理。
您无需查询先前形状的结果,而是将Activity Connector更改为根据结果进行分支。
连接两个活动后,右键单击行/箭头。然后,您可以选择对成功,失败,完成或跳过中的任何一个运行下一个活动。
您可以在之前和之后链接任意数量的活动。