Stream Analytics не производит вывод в таблицу SQL при использовании справочных данных - PullRequest
0 голосов
/ 29 августа 2018

В последнее время я работаю с ASA и пытаюсь вставить поток ASA непосредственно в таблицу SQL, используя справочные данные. Я основал свою разработку на этой статье MS: https://msdn.microsoft.com/en-us/azure/stream-analytics/reference/reference-data-join-azure-stream-analytics.

Обзор потока данных - телеметрия:

  • У меня много устройств разных типов (тепловые насосы, аккумуляторы, водяные насосы, AirCon ...). Каждое из этих устройств имеет свою схему JSON для своих данных телеметрии. Я могу различать JSON по атрибуту в сообщении ( например: "DeviceType": "HeatPump" или "DeviceType": "AirCon" ... )
  • Все эти устройства отправляют свою телеметрию в один концентратор событий
  • Позади Event Hub есть один компонент Stream Analytics, где я перенаправляю потоки на разные выходы на основе атрибута Device Type. Например, я перенаправляю телеметрию из HeatPumps с запросом SELECT * INTO output-sql-table FROM input-event-hub WHERE DeviceType = 'HeatPump'

Я хотел бы использовать некоторые справочные данные для «обогащения» потока ASA некоторыми IDKeys, прежде чем я вставлю поток в таблицу SQL.

Что я уже сделал:

  • Успешно вставлен поток ASA непосредственно в таблицу SQL с использованием запроса ASA * ​​1027 *, где [sql-таблица] имеет ту же схему, что и сообщение JSON + стандартные столбцы (EventProcessedUtcTime, PartitionID, EventEnqueueUtcTime)

  • Успешно вставлен поток ASA непосредственно в таблицу SQL с использованием запроса ASA * ​​1034 * - в основном тот же запрос, что и выше, только в этот раз я использовал именованные столбцы в операторе select.

  • Сгенерировал JSON-файл справочных данных и поместил его в хранилище больших двоичных объектов
  • Создано новое статическое (без использования заполнителей {date} и {time}) ввод справочных данных в ASA, указывающий на файл в хранилище BLOB.
  • Затем я подключил справочные данные к потоку данных в запросе ASA, используя тот же оператор с именованными столбцами
  • Результатов нет выходных строк в таблице SQL

При отладке проблемы я использовал функциональность Test в Query ASA * ​​1051 *

  • Я выбираю данные из Event Hub - данные потока.

  • Загружаю образцы данных из файла - справочные данные.

  • После завершения выборки данных из Event Hub я проверил запрос -> в результате было получено несколько строк -> в запросе это не проблема

  • Пока ... если я запускаю ASA, никакие выходные строки не вставляются в таблицу SQL.

Некоторые другие идеи, которые я попробовал:

  • Используется функция TRY_CAST для преобразования полей из справочных данных в соответствующие типы данных, прежде чем я объединю их с полями в данных потока

  • Использовал TRY_CAST функцию для приведения полей в SELECT до того, как я вставил их в таблицу SQL

Я действительно не знаю, что теперь делать. Какие-либо предложения?


РЕДАКТИРОВАТЬ: добавлен поток данных JSON, справочные данные JSON, запрос ASA, конфигурация ввода ASA, конфигурация хранилища BLOB и результат вывода теста ASA * ​​1092 * Поток данных JSON - одно сообщение [ { "Activation": 0, "AvailablePowerNegative": 6.0, "AvailablePowerPositive": 1.91, "DeviceID": 99999, "DeviceIsAvailable": true, "DeviceOn": true, "Entity": "HeatPumpTelemetry", "HeatPumpMode": 3, "Power": 1.91, "PowerCompressor": 1.91, "PowerElHeater": 0.0, "Source": "<omitted>", "StatusToPowerOff": 1, "StatusToPowerOn": 9, "Timestamp": "2018-08-29T13:34:26.0Z", "TimestampDevice": "2018-08-29T13:34:09.0Z" } ] Справочные данные JSON - одно сообщение [ { "SourceID": 1, "Source": "<ommited>", "DeviceID": 10, "DeviceSourceCode": 99999, "DeviceName": "NULL", "DeviceType": "Heat Pump", "DeviceTypeID": 1 } ] ASA Query WITH HeatPumpTelemetry AS ( SELECT * FROM [input-eh] WHERE source='<omitted>' AND entity = 'HeatPumpTelemetry' ) SELECT e.Activation, e.AvailablePowerNegative, e.AvailablePowerPositive, e.DeviceID, e.DeviceIsAvailable, e.DeviceOn, e.Entity, e.HeatPumpMode, e.Power, e.PowerCompressor, e.PowerElHeater, e.Source, e.StatusToPowerOff, e.StatusToPowerOn, e.Timestamp, e.TimestampDevice, e.EventProcessedUtcTime, e.PartitionId, e.EventEnqueuedUtcTime INTO [out-SQL-HeatPumpTelemetry] FROM HeatPumpTelemetry e LEFT JOIN [input-json-devices] d ON TRY_CAST(d.DeviceSourceCode as BIGINT) = TRY_CAST(e.DeviceID AS BIGINT) Конфигурация ввода справочных данных ASA * ​​1110 * Конфигурация ввода справочных данных в Stream Analytics Дерево каталогов BLOB-хранилищ Дерево каталогов хранилища BLOB-объектов Вывод тестового запроса ASA * ​​1122 * Вывод тестового запроса ASA * ​​1124 *

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я думаю, что нашел ошибку. В последние дни я тестировал почти все возможные комбинации при настройке входных данных в Azure Stream Analytics.

Я начал с этого примера в качестве базового: https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-build-an-iot-solution-using-stream-analytics

  • Я попробовал решение без каких-либо изменений, чтобы убедиться, что пример с вводом справочных данных работает -> он работал
  • Затем я изменил вывод ASA из CosmosDB в таблицу SQL, ничего не меняя -> это сработало
  • Затем я изменил свое первоначальное задание ASA так, чтобы оно было «таким же», как и задание ASA в примере (запись в таблицу SQL) -> это сработало
  • Затем я начал играть с именами каталогов BLOB -> здесь я нашел ошибку.

Я думаю, что проблема, с которой я столкнулся, связана с использованием символа "-" в имени папки.

В моем случае я создал папку с именем "reference-data" и загрузил файл с именем "devices.json" (структура папки "/reference-data/devices.json") -> вывод ASA в таблицу SQL не выполнен Работа Как только я изменил имя папки на «refdata» (структура папки «/referencedata/devices.json») -> выход ASA в таблицу SQL сработал.

Попытка 3 раза изменить ввод справочных данных из имени папки, содержащей «-» и не содержащей его => каждый раз, когда выход ASA на сервер SQL перестает работать, когда «-» находится в имени папки.

Подведем итог:

  • Я рекомендую не использовать "-" в именах папок BLOB для ввода статических справочных данных в задания ASA.
0 голосов
/ 30 августа 2018

matejp. Я не воспроизвел вашу проблему, и вы могли бы сослаться на мои шаги.

справочные данные в хранилище BLOB-объектов:

{
    "a":"aaa",
    "reference":"www.bing.com"
}

потоковые данные в хранилище BLOB-объектов

[
    {
        "id":"1",
        "name":"DeIdentified 1",
        "DeviceType":"aaa"      
    },
    {
        "id":"2",
        "name":"DeIdentified 2",
        "DeviceType":"No"     
    }
]

оператор запроса:

SELECT
    inputSteam.*,inputRefer.*
into sqloutput
FROM
    inputSteam
Join inputRefer on inputSteam.DeviceType = inputRefer.a

Выход:

enter image description here

Надеюсь, это поможет вам. Любая проблема, дайте мне знать.

...