Stream Analytics - обработка JSON без имени массива - PullRequest
0 голосов
/ 04 января 2019

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 ]

0 голосов
/ 05 января 2019

Вам не нужно использовать GetArrayElements.Достаточно просто выбрать массив json в качестве входного формата.Потоковая аналитика читает каждый объект в массиве как запись.То же самое с джайнскими объектами, разделенными строкой или пробелом, каждый объект читается как запись.

0 голосов
/ 04 января 2019

Да, ему нужно имя массива.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

enter image description here

...