Azure 数据工厂 - 查找 activity - 如何访问错误数据? (SQL 错误)

Azure Data Factory - Lookup activity - How to access error data? (SQL error)

我正在使用 Azure 数据工厂Azure 数据库实例

我有一个数据工厂查找 activity,它调用了一个可能会失败的过程。在 CATCH 块中,当发生故障时调用 THROW。在 Azure 数据工厂客户端中检查错误弹出窗口时,我可以看到 'output' of THROW。我目前无法访问这个'output',据我所知它没有输出。

我试过了(每行都是一次尝试):

@activity('activityName').output.firstRow.error

@activity('activityName').output.firstRow.errors

@activity('activityName').error.message

@activity('activityName').errors.message

@activity('activityName').errors.number

@activity('activityName').ErrorCode

@activity('activityName').Errors

检查错误弹出窗口时:

Failure happened on 'Source' side. ErrorCode=SqlOperationFailed, 'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message=A database operation failed with the following error: 'blabla', Source=,''Type=System.Data.SqlClient.SqlException, Message=blabla, Source=.Net SqlClient Data Provider, SqlErrorNumber=245, Class=16, ErrorCode=-2146232060, State=1, Errors=[{ Class=16, Number=245,State=1,Message=blabla,},],'

数据显然在那里,只是我无法访问它,而且我发现在这种情况下缺少文档。有关于从 CopyActivity 而不是 LookupActivity 访问错误输出的综合文档。

我想要实现的是记录错误。在某些情况下,该过程会成功并需要将输出提交给数据工厂,这就是为什么我必须从 THROW; 捕获错误数据的原因;在将 SELECT 返回到数据工厂后,我无法通过使用 THROW 再次引发错误来使此任务失败。

通常您可以访问如下所示的活动复合输出:

@activity('*activityName*').output.*subfield1*.*subfield2*

错误正文格式如下:

"value": {
        "errorCode": "2100",
        "message": "Failure happened on 'Source' side. ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=A database operation failed with the following error: 'Invalid object name 'SalesLT.Customr'.',Source=,''Type=System.Data.SqlClient.SqlException,Message=Invalid object name 'SalesLT.Customr'.,Source=.Net SqlClient Data Provider,SqlErrorNumber=208,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=208,State=1,Message=Invalid object name 'SalesLT.Customr'.,},],'",
        "failureType": "UserError",
        "target": "Lookup",
        "details": []
    }

您可以使用它来添加动态内容:

@activity('<name of your lookup>').Error.message

这是一个示例,您可以在其中使用 Add activity on 方法到 select 继续到下一个 [=58= 的输出流].

存储过程导致错误:

字符串变量 errorOutput 现在包含错误消息!

此外,您可以使用点运算符访问错误消息的每个元素。

 1. @activity('<name of your lookup>').Error.errorCode
    
 2. @activity('<name of your lookup>').Error.failureType

 3. @activity('<name of your lookup>').Error.target

 4. @activity('<name of your lookup>').Error.details

或者, 如果您想确保 activity 仅在其前一个 activity 时执行(在您的场景中查找 activity)成功了,你也可以在“Completion”流上使用If condition activity。

不同的原因可能导致此错误。检查list可能的原因分析和相关建议。