流分析Egress到Azure功能

时间:2017-10-01 15:48:23

标签: azure azure-functions azure-stream-analytics

Microsoft宣布支持几天前将数据从Azure Stream Analytics发送到Azure Functions:

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

我尝试了这个但无法将数据发送到Azure Functions。是否有任何指南如何从IoT-hub发送数据包 - > Azure流分析 - > 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 个答案:

答案 0 :(得分:2)

根据您的描述和错误消息,我猜您的天蓝色功能代码有问题(它返回500错误)。

我建议您首先检查azure功能日志以查找详细信息错误消息并更改您的代码。

详情可参考以下图片:

打开azure功能应用程序并找到显示器

enter image description here

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

我建议您也可以使用此代码(Http触发器)来测试您的结果:

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

答案 1 :(得分:2)

不确定是否仍需要此功能,但供将来参考:ASA作业会将JSON数组中的数据输出到Azure功能。 像这样的ASA查询示例

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 :(得分:1)

为了补充这个答案,你可以使用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"
}