代码之家  ›  专栏  ›  技术社区  ›  Tero Toivola

流分析出口到Azure功能

  •  1
  • Tero Toivola  · 技术社区  · 7 年前

    几天前,微软宣布支持将数据从Azure Stream Analytics发送到Azure功能:

    https://azure.microsoft.com/en-us/blog/new-in-stream-analytics-output-to-azure-functions-built-in-anomaly-detection-etc/

    我尝试了这个,但无法将数据发送到Azure函数。有没有关于如何从物联网中心发送数据包的指南->Azure Stream Analytics->Azure功能?

    WITH rpidata AS
    (
    SELECT 
    *, 
    DATEADD(Hour, 3, timecreated) AS FITimezone
    FROM [rpi]
    )
    SELECT *
    INTO [PowerBI]
    FROM rpidata
    SELECT *
    INTO [storageout]
    FROM rpidata
    SELECT *
    INTO [fnout]
    FROM rpidata
    

    我收到的错误消息是:

    无法成功将空批发送到Azure函数。请确保你的函数应用程序名称、函数名称和API密钥正确,并且你的Azure函数已编译。如果所有这些参数都正确,Azure功能此时可能暂时可用。请稍后再试。Azure函数返回的响应代码为500:InternalServerError。它应该以200、202或204作为响应。

    我应该使用哪种函数输入来接收数据?在这个例子中,我链接的函数名是httptriggercsharp。。。streamjob是否将数据作为json发送?

    3 回复  |  直到 7 年前
        1
  •  2
  •   silent    7 年前

    不确定您是否仍然需要它,但供将来参考:ASA作业将JSON数组中的数据输出到Azure函数。

    SELECT
       w.col1 as key1,
       w.col2 as key2,
       System.Timestamp as time
    INTO
       azfunction
    FROM
       [input] w;
    

    将像这样到达您的函数中

    [
             {
                 "key1":"value1",
                 "key2":"value2",
                 "time":"2017-09-04T17:51:02.7986986Z"
             },
             {
                 "key1":"value3",
                 "key2":"value4",
                 "time":"2017-09-04T17:51:02.7986986Z"
             }
    ]
    

    JSON数组将包含多少元素,取决于如何在ASA中设置Az函数输出以及事件到达ASA的速度。根据您的场景,阵列可能只有一个元素或100个元素。

        2
  •  2
  •   Brando Zhang    7 年前

    根据您的描述和错误消息,我猜您的azure函数代码有问题(返回500个错误)。

    您可以参考以下图片了解详细信息:

    打开azure function应用程序并查找监视器

    enter image description here

    我还创建了azure函数的测试流分析。我发现流分析会将json发送到azure函数。

    using System.Net;
    
    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
         var content = req.Content;
        string jsonContent = await content.ReadAsStringAsync();
    
        log.Info(jsonContent);
    
        return   req.CreateResponse(HttpStatusCode.OK, jsonContent);
    }
    

    enter image description here

        3
  •  1
  •   Dmitriy rajalaxmi    7 年前

    为了补充这个答案,您可以使用来自mockaroo的模拟数据。

    https://mockaroo.com/

    要测试上述代码:

    {
        "DeviceID": 8,
        "Temperature": 28,
        "Unit": 40,
        "TimeStamp": "2018-03-23T17:43:18.0000000Z",
        "EventProcessedUtcTime": "2018-03-23T17:44:36.5010819Z",
        "PartitionId": 0,
        "EventEnqueuedUtcTime": "2018-03-23T17:43:18.5700000Z"
    },
    
    {
        "DeviceID": 8,
        "Temperature": 66,
        "Unit": 27,
        "TimeStamp": "2018-03-23T17:43:20.0000000Z",
        "EventProcessedUtcTime": "2018-03-23T17:44:36.8143642Z",
        "PartitionId": 1,
        "EventEnqueuedUtcTime": "2018-03-23T17:43:21.0090000Z"
    }