我想用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', ....
答案 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)