Задание аналитики потоков Azure с использованием массивов - PullRequest
0 голосов
/ 27 декабря 2018

Я настроил задание в потоковой аналитике, которое принимает сообщения из IotHub и загружает значения в таблицу SQL.

Все работало нормально, когда для каждого сообщения использовался только один набор значений, однако я хотел отправитьнесколько наборов значений в одном сообщении с использованием массива.

Ниже приведен пример сообщения Json, которое достигает задания:

[{
    "valores": {
        "0": {
            "voltage": 230.8,
            "current": 0.18,
            "power": 32.093,
            "frequency": 50,
            "energy": 0.71,
            "dvcid": 1,
            "gway": "SPC-G02",
            "time": "2018-12-27T16:02:20.1690000Z"
        },
        "1": {
            "voltage": 230.7,
            "current": 0.144,
            "power": 23.759,
            "frequency": 50.1,
            "energy": 0.71,
            "dvcid": 1,
            "gway": "SPC-G02",
            "time": "2018-12-27T16:02:25.1690000Z"
        },
        "2": {
            "voltage": 230.7,
            "current": 0.143,
            "power": 23.369,
            "frequency": 50,
            "energy": 0.71,
            "dvcid": 1,
            "gway": "SPC-G02",
            "time": "2018-12-27T16:02:30.1740000Z"
        },
        "3": {
            "voltage": 230.4,
            "current": 0.163,
            "power": 28.075,
            "frequency": 50,
            "energy": 0.71,
            "dvcid": 1,
            "gway": "SPC-G02",
            "time": "2018-12-27T16:02:35.1730000Z"
        },
        "4": {
            "voltage": 230.5,
            "current": 0.167,
            "power": 29.207,
            "frequency": 50,
            "energy": 0.71,
            "dvcid": 1,
            "gway": "SPC-G02",
            "time": "2018-12-27T16:02:40.1810000Z"
        },
    },
    "EventProcessedUtcTime": "2018-12-27T16:03:00.9574234Z",
    "PartitionId": 3,
    "EventEnqueuedUtcTime": "2018-12-27T16:02:58.0290000Z",
    "IoTHub": {
        "MessageId": null,
        "CorrelationId": null,
        "ConnectionDeviceId": "RaspberryPi-Teste1",
        "ConnectionDeviceGenerationId": "636807313519039605",
        "EnqueuedTime": "2018-12-27T16:02:58.0260000Z",
        "StreamId": null
    }
}
]

Этот вывод был получен из утилиты данных примерав задании.

Я попытался настроить тестовый запрос, который собирает только один столбец для БД (dvcid), однако при тестировании запроса я получаю сообщение «Произошла непредвиденная ошибка».

 SELECT
 StageElement.arrayvalue.dvcid as dvcid
 INTO [Guardardb]
 FROM [Pc-Sdm230] AS evento
 CROSS APPLY GetArrayElements(evento.valores) AS StageElement

Задание не выполняется, когда я пытаюсь его запустить.

Когда я тестирую следующий запрос, все работает нормально, и я вижу все значения Valores в одном столбце:

SELECT
*
INTO [Guardardb]
FROM [Pc-Sdm230] AS evento

Я не могу понять, что я делаю неправильно.

1 Ответ

0 голосов
/ 28 декабря 2018

GetArrayElement используется для элементов Array в JSON.В вашем случае у вас есть вложенный JSON, поэтому вам нужно использовать GetRecordProperties.

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

   SELECT 
   StageElement.PropertyValue.dvcid as dvcid
   INTO [Guardardb]
   FROM [Pc-Sdm230] AS evento
   CROSS APPLY GetRecordProperties(evento.valores) AS StageElement

Дайте мне знать, работает ли он для вас.

Спасибо,

JS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...