У меня есть задание Azure Stream Analytics (ASA), которое обрабатывает данные телеметрии устройства из концентратора событий. Поток должен быть объединен со справочными данными из таблицы sql, чтобы дополнить каждое сообщение дополнительными метаданными устройства. Объединенная запись должна храниться в CosmosDb.
База данных sql для обслуживания метаданных устройства:
CREATE TABLE [dbo].[MyTable]
(
[DeviceId] NVARCHAR(20) NOT NULL PRIMARY KEY,
[MetaData] NVARCHAR(MAX) NULL /* this stores json, which can vary per record */
)
В ASA я настроил ввод справочных данных с помощью простого запроса:
SELECT DeviceId, JSON_QUERY(MetaData) FROM [dbo].[MyTable]
И У меня есть основной запрос ASA, который выполняет объединение:
WITH temptable AS (
SELECT * FROM [telemetry-input] TD PARTITION BY PartitionId
LEFT OUTER JOIN [metadata-input] MD
ON TD.DeviceId = MD.DeviceId
)
SELECT TD.*, MD.MetaData
INTO [cosmos-db-output]
FROM temptable PARTITION BY PartitionId
Все это работает, и объединенные данные сохраняются в CosmosDb. Однако значение столбца метаданных из sql обрабатывается как строка и сохраняется в comos с кавычками и escape-символами. Пример:
{ "DeviceId" : "abc1234", … , "MetaData" : "{ \"TestKey\": \"test value\" }" };
Есть ли способ обработки и хранения json из метаданных как правильного Json объекта, то есть
{ "DeviceId" : "abc1234", … , "MetaData" : { "TestKey": "test value" } };