Stream Analytics - обработка JSON без имени массива
IoT Edge v2 с модулем Modbus отправляет данные в IoT Hub в формате:
[
{
"DisplayName": "Voltage",
"HwId": "",
"Address": "400001",
"Value": "200",
"SourceTimestamp": "2019-01-03 23:40:24"
},
{
"DisplayName": "Voltage",
"HwId": "",
"Address": "400002",
"Value": "24503",
"SourceTimestamp": "2019-01-03 23:40:24"
},
...
]
Я хочу преобразовать этот массив в строки, используя запрос потоковой аналитики, содержащий CROSS APPLY GetArrayElements(), но для этой функции требуется имя массива. Очевидно, нет имени. Какие-либо предложения?
https://docs.microsoft.com/en-us/stream-analytics-query/getarrayelements-azure-stream-analytics https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-parsing-json
2 ответа
Да, ему нужно имя массива. CROSS APPLY GetArrayElements()
используется для вложенного массива.
Пример:
[{
"source": "xda",
"data":
[{
"masterTag": "UNIFY1",
"speed": 180
},
{
"masterTag": "UNIFY2",
"speed": 180
}],
"EventEnqueuedUtcTime": "2018-07-20T19:28:18.5230000Z",
},
{
"source": "xda",
"data": [{
"masterTag": "UNIFY3",
"speed": 214
},
{
"masterTag": "UNIFY4",
"speed": 180
}],
"EventEnqueuedUtcTime": "2018-07-20T19:28:20.5550000Z",
}
]
Вы можете использовать ниже sql, чтобы преобразовать его в строки:
SELECT
jsoninput.source,
arrayElement.ArrayValue.masterTag
INTO
output
FROM jsoninput
CROSS APPLY GetArrayElements(jsoninput.data) AS arrayElement
Однако теперь введенные вами данные являются чистым массивом. Если вы хотите преобразовать этот массив в строки, просто используйте sql:
select jsoninput.* from jsoninput
Вам не нужно использовать GetArrayElements. Достаточно просто выбрать массив json в качестве входного формата. Потоковая аналитика читает каждый объект в массиве как запись. То же самое с джайнскими объектами, разделенными строкой или пробелом, каждый объект читается как запись.