我有一个子管道,该子管道使用数据集从控制文件接收指令。这些说明定义了从哪个目录复制文件。
首先,此子管道通过源文件夹上的“获取元数据”活动检查文件是否存在。然后,如果从GetMetaData返回了一个或多个子项,它将执行一个子管道来处理数据。
在控件数据集中,还有一个必填的Y / N字段,这意味着如果文件夹或文件不存在,我可以忽略该错误。
如果该文件夹不存在,则GetMEtadata将失败。如果存在但没有文件,我得到0个子项。因此,文件或文件夹丢失(错误或0项)会发生2种不同的情况。
无论哪种情况,我都需要将GetMetaData的输出路由到IF,以检查是否需要该文件。如果不是,则消耗错误并返回。如果需要,请提出错误。
虽然我找不到找到错误的方法。同样重要的是,有没有一种替代方法可以更好地与ADF V2设计配合使用?
非常感谢, 马克。
答案 0 :(得分:2)
我有类似的情况,我使用SqlStoreProcedure进行管理。
"storedProcedureName": "sp_executesql",
"storedProcedureParameters": {
"stmt": {
"value": "Declare @err_msg NVARCHAR(150)SET @err_msg=N'Error occurred in this pipeline somehow somewhere something. Best regards. EXISTSCheers'RAISERROR(@err_msg,15,1)",
"type": "string"
}
}
StoredProcedureName:sp_executesql
StoredProcedureParameter:stmt
值:声明@err_msg NVARCHAR(150)SET @ err_msg = N'此管道中的某个地方发生错误。最好的祝福。 EXISTSCheers'RAISERROR(@ err_msg,15,1)(当然,您可以更改错误文本:)
类型:字符串
希望这会有所帮助
答案 1 :(得分:2)
我使用“设置变量任务”来实现此目的。
在变量表达式中,我被零除。这引发了一个错误,可根据需要启动我的管道。我认为可以采用的最通用的方式。
"name": "Throw Error",
"description": "You can't throw an error in DF so I try to divide by zero. :)",
"type": "SetVariable",
"dependsOn": [],
"userProperties": [],
"typeProperties": {
"variableName": "ThrowError",
"value": {
"value": "@div(1,0)",
"type": "Expression"
}
}
答案 2 :(得分:0)
我正在使用的解决方案是在API管理中创建一个模拟API,该API返回500个HTTP代码以及一条错误消息。有关如何执行此操作的更多详细信息,请参见:https://docs.microsoft.com/en-us/azure/api-management/mock-api-responses。
从ADF管道内部,我使用Web Activity传入错误消息来调用此模拟API。
然后我可以看到失败的管道并出现预期的错误。
答案 3 :(得分:0)
我使用 Web Activity 并获取了一个不存在的 URL:www.notreal-nvlsuifhg9348h4932.com
。
(不过我确实喜欢 Chris Hume 的 Set 1/0 选项。可能会窃取它;))
答案 4 :(得分:0)
我发现抛出错误的最简单方法是对以下查询进行 SQL 查找:
THROW 99999, 'Error message thrown', 1
对我们来说,我们广泛使用 Azure 函数应用程序,因此我们创建了一个名为“ThrowError”的特殊函数,该函数会抛出一个错误,并将消息作为参数提供。仅当您已经使用 Azure Function Apps 时,这是最简单的,不值得只创建一个函数。