Объединение нескольких предупреждений с изменяющейся схемой в Azure Stream Analytics - PullRequest
0 голосов
/ 09 мая 2018

У меня есть EventHub, который получает события с парами JSON K / V, которые могут различаться. Я хочу выполнить одно задание Stream Analytics и создать несколько предупреждений, сохранив все пары K / V в результате. Например, такие события можно увидеть:

{"temp1": 45, "temp2": 60, "source": "sensor-a"},
{"temp1": 37, "temp2": 50, "humidity": 17, "source": "new-sensor"}

Я использую влажность в качестве примера, но суть в том, что ключи различаются.

Один из способов это сработало бы, если бы я мог просто выполнить несколько операторов выбора с моими различными предложениями WHERE.

SELECT *, ALERT='Temp LOW' FROM [input] WHERE temp1 < 15
UNION
SELECT *, ALERT='Humidity HIGH' FROM [input] WHERE humidity > 50

Но это не сработает, потому что SELECT * в ASA не разрешено с UNION. Один из способов это может работать, если, например, исходные данные могут быть возвращены как дочерний элемент с именем raw_data. Я не уверен, как / если я смогу сделать это. Мне нужны другие пары K / V, но я не могу знать все названия ключей.

С необработанными данными в детстве, результат может выглядеть так:

{"ALERT": "Humidity HIGH", "raw_data":
  {"temp1": 33, "temp2": 52, "humidity": 60, "source": "sensorname", "otherkey": "value"}
}

Я подумал, что может сработать то, что я могу использовать инструкцию WITH для генерации поля ALERT, а затем использовать JOIN для добавления в поток событий. Я мог бы сгенерировать UUID для каждого события, чтобы присоединиться. Я еще не смог понять это.

Есть ли способ сделать либо возврат исходного события как дочернего в JSON, либо метод JOIN для добавления поля ALERT?

1 Ответ

0 голосов
/ 09 мая 2018

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

Вот модифицированный пример запроса из вашего вопроса:

SELECT raw_data=[input], ALERT='Temp LOW' FROM [input] WHERE temp1 < 15
UNION
SELECT raw_data=[input], ALERT='Humidity HIGH' FROM [input] WHERE humidity > 50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...