【问题标题】:Azure Data Factory - Lookup activity - How to access error data? (SQL error)Azure 数据工厂 - 查找活动 - 如何访问错误数据? (SQL 错误)
【发布时间】:2021-11-11 18:46:24
【问题描述】:

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

我有一个调用可能失败的过程的数据工厂查找活动。在CATCH 块中THROW 在发生故障时被调用。在 Azure 数据工厂客户端检查错误弹出窗口时,我可以看到 THROW 的“输出”。我目前无法访问此“输出”,据我所知,它不是输出

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

@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

检查错误弹出窗口时:

“源”端发生故障。 ErrorCode=SqlOperationFailed, '类型=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, 消息=数据库操作失败,出现以下错误: 'blabla',Source=,''Type=System.Data.SqlClient.SqlException, Message=blabla,Source=.Net SqlClient 数据提供者, SqlErrorNumber=245,Class=16,ErrorCode=-2146232060,State=1, Errors=[{ Class=16, Number=245,State=1,Message=blabla,},],'

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

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

【问题讨论】:

    标签: logging error-handling azure-sql-database azure-data-factory-2


    【解决方案1】:

    通常您可以访问以下活动复杂输出:

    @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 方法来选择继续到下一个活动的输出流。

    存储过程导致错误:

    字符串变量 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
    

    或者,如果您想确保某个活动仅在其先前的活动(您的场景中的查找活动)成功时执行,您还可以使用 If 条件 活动在“完成”流中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-17
      • 2022-11-11
      • 2020-07-15
      • 1970-01-01
      • 2015-07-15
      • 2021-12-25
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多