【问题标题】:Azure Data Factory V2 Copy data issue - Error code: 2200Azure 数据工厂 V2 复制数据问题 - 错误代码:2200
【发布时间】:2019-11-12 14:11:40
【问题描述】:

我正在尝试使用 Azure 数据工厂 V2 中的 REST API 连接器从 ServiceNow 表中提取数据。在提取数据时,有时会出现以下错误,有时我没有收到任何错误并且管道正在成功运行。

{
"errorCode": "2200",
"message": "Failure happened on 'Source' side. ErrorCode=UserErrorInvalidJsonDataFormat,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Error occurred when deserializing source JSON data. Please check if the data is in valid JSON object format.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=Newtonsoft.Json.JsonReaderException,Message=Invalid character after parsing property name. Expected ':' but got: ,. Path 'result', line 1, position 15740073.,Source=Newtonsoft.Json,'",
"failureType": "UserError",
"target": "REST-API-ServiceNow" 
}

有人可以帮我吗?

提前致谢!

【问题讨论】:

    标签: json azure azure-data-factory azure-data-factory-2 jsonparser


    【解决方案1】:

    1.反序列化源JSON数据时出错。请检查数据是否为有效的 JSON 对象格式。 2.Message=解析属性名后的无效字符。应为“:”,但得到:,。

    我认为错误详细信息表明 ADF 无法对您的源数据进行反序列化,因为它不是标准 JSON 格式。非法 JSON 数据无法通过 ADF 复制活动。

    我无法重现您的问题,因为我无法触摸您的源数据。但是,我建议您在执行复制活动之前使用WEB Activity 调用您的 REST API。并收集 Web Activity 的输出(来自 REST API 的响应)以将它们存储在其他位置。这样您就可以每次都检查您的源数据是否合法。


    我的想法如下:

    1.配置 Web Activity 以调用您的 REST API,然后您可以从源数据中获取响应。

    2.配置一个Function App Activity来记录上述Web Activity的输出。

    Body应该设置Web Activity的输出:@activity('Web1').output,然后登录到函数应用中。部分示例函数代码如下:

    using System;
    using System.IO;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    
    namespace FunctionAppStoreCSV
    {
        public static class Function2
        {
            [FunctionName("Function2")]
            public static async Task<IActionResult> Run(
                [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
                ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
    
                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    
    
                dynamic data = JsonConvert.DeserializeObject(requestBody);
    
                log.LogInformation(requestBody);
    
                return requestBody != null
                    ? (ActionResult)new OkObjectResult($"Log Successfully")
                    : new BadRequestObjectResult("Please pass output in the request body");
            }
        }
    }
    

    我在本地做了一个测试,你可能会看到类似这样的日志数据:

    如果在portal中,可以在KUDU url查看日志:D:\home\LogFiles\Application\Functions\function\Function2&gt;

    3.在复制活动之前将它们都连接到 ADF 中。

    提示:

    我的方式可以节省天蓝色存储的钱,我只是记录数据,以便您检查数据是否遵循严格的格式。当然,您可以将它们存储在 blob 存储中。只需编写代码,将 Body 数据存储到 Azure Function 应用程序中所需的 Blob 存储。

    【讨论】:

    • 感谢@Jay Gong 的回复。但是,我不确定如何将 Web 活动数据的输出存储在 CSV 文件中。你能帮帮我吗?
    • 当然@Jay。谢谢!
    • @Akhil 请查看我的更新答案,希望对您有所帮助。
    • 感谢您发表您的想法。 Azure 函数应用不是为我创建的。我正在与团队合作以创建它。我会及时通知你。
    • @Akhil 当然,慢慢来。
    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多