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 в качестве входного формата. Потоковая аналитика читает каждый объект в массиве как запись. То же самое с джайнскими объектами, разделенными строкой или пробелом, каждый объект читается как запись.

Другие вопросы по тегам