如何从 ADFV2 中的 if 活动引发错误?

Mar*_*rkD 7 azure-data-factory-2

我有一个子管道,它使用数据集从控制文件接收指令。这些说明定义了从哪个目录复制文件。

首先,此子管道通过源文件夹上的“获取元数据”活动检查文件是否存在。如果从 GetMetaData 返回一个或多个子项,它然后执行子管道来处理数据。

在控制数据集中,还有一个必需的 Y/N 字段,这意味着如果文件夹或文件不存在,我可以忽略错误。

如果文件夹不存在,GetMEtadata 将失败。如果它存在但没有文件,我会得到 0 个子项。因此,文件或文件夹丢失(错误或 0 个项目)会发生 2 种不同的情况。

在任何一种情况下,我都需要将 GetMetaData 的输出路由到检查是否需要文件的 IF。如果没有,则消耗错误并返回。如果需要,则引发错误。

不过,我找不到引发错误的方法。同样重要的是,是否有替代方法可以更好地与 ADF V2 设计配合使用?

非常感谢,马克。

小智 10

我使用 Set Variable Task 来实现这一点。

在变量表达式中,我除以零。这会引发一个错误,根据需要传播我的管道。我能想到的最通用的方法。

"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"
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 有趣的方法。接受的答案的优点是您可以编写一些将记录在日志中的信息。对于这个解决方案,我认为这取决于如何命名变量。也就是说,这是针对缺失功能的简单解决方法。 (2认同)

Dra*_*anB 7

我有类似的场景,我用 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" } }

存储过程名称:sp_executesql

存储过程参数:stmt

值:声明 @err_msg NVARCHAR(150)SET @err_msg=N'Error 在这个管道中以某种方式发生。此致。EXISTSCheers'RAISERROR(@err_msg,15,1)(当然你可以更改错误文本:)

类型:字符串

希望这可以帮助