azure-sql-database - 流分析 - 如何处理引用输入中的 json

标签 azure-sql-database azure-cosmosdb azure-stream-analytics stream-analytics

我有一个 Azure 流分析 (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 中。示例:

{ "DeviceId" : "abc1234", … , "MetaData" : "{ \"TestKey\": \"test value\" }" };

有没有办法将元数据中的 json 处理和存储为正确的 Json 对象,即

{ "DeviceId" : "abc1234", … , "MetaData" : { "TestKey": "test value" } };

最佳答案

我找到了在 ASA 中实现它的方法 - 你需要创建 javascript user function :

function parseJson(strjson){
          return JSON.parse(strjson);
}

并在您的查询中调用它:

...
SELECT TD.*, udf.parseJson(MD.MetaData)
...

关于azure-sql-database - 流分析 - 如何处理引用输入中的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60206926/

相关文章:

sql-server - 使故障转移组中的 Azure SQL 数据库脱机

sql - 无法将记录从一个表插入到其他数据库的另一个表中

azure - 搜索 blob 存储数据

azure - Cosmos DB 中的 group by 问题

azure - 每个 COSMOS 实例一个数据库还是单个 COSMOS 实例中有多个数据库?

json - 使用流分析将自定义事件维度从 Application Insights 导出到 SQL

azure - 找不到部署 ASP.NET Core 7 Web API somepage.azurewebsites.net 页面

c# - 如何跟踪 documentdb Linq 提供程序生成的查询?

azure - 将输出数据从流分析作业流式传输到 Azure Synapse Analytics SQL 池表?

Azure 流分析 : How to ingest image to Azure hub in real time from my client system?