Azure流分析查询

时间:2018-06-06 06:05:43

标签: azure azure-stream-analytics

我想用Stream Anaytics将以下json字符串写入每分钟的SQL数据库。

{
  "time": "2018-06-05T11:00:00Z",
  "deviceId": 10,
  "val": [ 200, 250, 300, 201, 501, 250, 890 ]
}

数据库有列"时间"," deviceId",7列值。

我的查询:

WITH seperate AS(
SELECT
    EventEnqueuedUtcTime AS Time,
    deviceId,
    AVG(GetArrayElement(val, 0)) AS '0',
    AVG(GetArrayElement(val, 1)) AS '1'
FROM
    Input
GROUP BY 
    EventEnqueuedUtcTime,
    deviceId,
    TumblingWindow(minute, 1)
)
SELECT * INTO Output1 FROM seperate WHERE deviceId = 1
SELECT * INTO Output2 FROM seperate WHERE deviceId = 2
SELECT * INTO Output3 FROM seperate WHERE deviceId = 3
SELECT * INTO Output4 FROM seperate WHERE deviceId = 4
SELECT * INTO Output5 FROM seperate WHERE deviceId = 5

这里我有一个问题,即所有值都是全部更新数据库(每10个sek 6个) 我希望每分钟都有一个数据库行

第二件事是有另一种方法来编写数组值(没有写AVG(GetArrayElement(val,0))AS' 0', AVG(GetArrayElement(val,1))AS' 1', ....

1 个答案:

答案 0 :(得分:0)

GetArrayElement是你的朋友。见the docs

SELECT
    time,
    deviceId,
    GetArrayElement(val, 0) AS FirstElement,
    GetArrayElement(val, 1) AS SecondElement
    … and so on
INTO
    Output
FROM
    IotHub

您指示数据每隔10秒来自IOT中心,并且存储的数据应为“原始”数据。但是您也希望每分钟都将数据写入数据库。然后,您必须直接聚合数据或将其存储在数据库中。

您不能使用Azure Stream Analytics缓冲传入的数据,然后每分钟将6条记录写入数据库。

您可以每分钟应用windowing,但随后会在窗口期间汇总数据。例如, 你可以每分钟存储数组的平均值。

如果你想要原始值你不能应用窗口,你必须在数据进入时(每10秒钟)将它们写入数据库

Windows查询可能类似于

SELECT
    deviceId,
    AVG(GetArrayElement(val, 0)) AS AvgFirstElement,
    AVG(GetArrayElement(val, 1)) AS AvgSecondElement
    … and so on
INTO
    Output
FROM
    IotHub
GROUP BY 
    deviceId, 
    TumblingWindow(minute, 1)