Запрос Azure Stream Analytics - PullRequest
0 голосов
/ 06 июня 2018

Я хотел бы записать следующую строку json с Stream Anaytics в базу данных SQL каждую минуту.

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

В базе данных есть столбцы «time», «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

здесь у меня проблема с обновлением базы данных каждую минуту со всеми значениями (6 из каждых 10 сек), я хочу каждую минуту одну строку базы данных

Во-вторых, существует другой способ записи значений массива (без записи AVG (GetArrayElement (val, 0)) AS '0', AVG (GetArrayElement (val, 1)) AS '1', ....

1 Ответ

0 голосов
/ 06 июня 2018

GetArrayElement твой друг.См. документы

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

Вы указываете, что данные поступают из концентратора IOT каждые 10 секунд, и сохраненные данные должны быть "необработанными" данными.Но вы также хотите, чтобы данные записывались в базу данных каждую минуту.Затем вам придется агрегировать данные или сохранять их непосредственно в базе данных.

Нельзя использовать 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)
...