如何在 ADFV2 中从 if activity 引发错误?

How do I raise an error from if activity in ADFV2?

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

首先,此子管道通过源文件夹上的获取元数据 activity 检查文件是否存在。如果从 GetMetaData return编辑了一个或多个子项,它随后会执行一个子管道来处理数据。

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

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

无论哪种情况,我都需要将 GetMetaData 的输出路由到一个 IF 以检查是否需要该文件。如果不是,则消耗错误和 return。如果需要,请提出错误。

不过我找不到引发错误的方法。同样重要的是,是否有一种替代方法可以更好地工作或更适合 ADF V2 设计?

非常感谢, 马克.

我有类似的情况,我用 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

Value: Declare @err_msg NVARCHAR (150) SET @err_msg=N'Error occurred in this pipeline something somewhere something.最好的祝福。 EXISTSCheers'RAISERROR (@err_msg,15,1) (当然你可以更改错误文本:)

类型:字符串

我使用设置变量任务来实现这一点。

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

"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"
   }
}

我正在使用的解决方案是在 API 管理中创建一个模拟 API,其中包含 returns 500 HTTP 代码和一条错误消息。有关如何执行此操作的更多详细信息,请参见此处:https://docs.microsoft.com/en-us/azure/api-management/mock-api-responses.

在 ADF 管道内部,我调用此模拟 API 使用 Web Activity 传递错误消息。

然后我可以看到带有预期错误的失败管道。

我使用 Web Activity 并获取了一个不存在的 URL:www.notreal-nvlsuifhg9348h4932.com

(不过我确实喜欢 Chris Hume 的 Set 1/0 选项。可能会窃取它;))

我发现引发错误的最简单方法是对以下查询执行 SQL 查找:

THROW 99999, 'Error message thrown', 1

对于我们来说,我们广泛使用了 Azure Function Apps,因此我们创建了一个名为“ThrowError”的特殊函数,它会抛出一个错误,并提供一条消息作为参数。仅当您已经使用 Azure Function Apps 时,这是最简单的,不值得只创建一个函数。

2021 年 11 月,ADF 在一般组中获得 Fail activity。

它有两个特定的属性,失败消息和错误代码,它们都是动态的。他们的行为完全符合预期。

执行时总是失败状态。消息和代码被评估并出现在管道输出中。