有没有办法通过流分析作业将原始 JSON 数据传输到 Azure SQL 中?

Posted

技术标签:

【中文标题】有没有办法通过流分析作业将原始 JSON 数据传输到 Azure SQL 中?【英文标题】:Is there any way to reach raw JSON data through Stream Analytics Job into Azure SQL? 【发布时间】:2021-08-09 13:42:32 【问题描述】:

我有一些传感器以 JSON 格式的字符串向 Azure IoT Hub 发送数据。到目前为止,我通过 Hub Trigger 上的 Function Apps 处理数据。

现在我正在尝试寻找方法,如何通过 Azure 流分析作业将“原始”JSON 数据保存到 Azure SQL 数据库中。问题是“原始”数据没有设置,SA 总是将输入 JSON 解析(反序列化)到数据字段中。我只想获取“原始” JSON 并将其保存到数据库中。

让我通过例子来解释这个...... 原始 JSON(由 IoT 中心捕获)如下所示:


"gtwid": "0013A200419F2BAA",
"devid": "0013A200418975CC",
"telemetry": 
  "t1": 
    "id": "a698ab4d2001",
    "avg": 26,
    "max": 26,
    "min": 26
  

当我尝试在 SA 中使用以下查询代码时,我得到了部分想要的结果,但仅适用于“遥测”树:

WITH s AS
(
SELECT
        gtwid
      , devid 
      , telemetry.*      
FROM
    [iothub]
)

SELECT gtwid,devid,gtwtime,timestamp,t1 INTO [db] FROM s

它在 db 中产生这个结果:

RecID  gtwid             devid             t1
1      0013A200419F2BAA  0013A200418975CC  "id":"a698ab4d2001","avg":26,"max":26,"min":26

我想得到这样的结果:

RecID  JsonValue
1      "gtwid": "0013A200419F2BAA","devid": "0013A200418975CC","telemetry": "t1": "id": "a698ab4d2001","avg": 26,"max": 26,"min": 26

请问我该怎么做?

【问题讨论】:

【参考方案1】:

目前无法绕过反序列化。

相反,您可以使用javascript UDF 重新生成原始有效负载。这显然不是一回事,但它可以提供帮助,具体取决于您需要它的原因。

【讨论】:

以上是关于有没有办法通过流分析作业将原始 JSON 数据传输到 Azure SQL 中?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 流分析作业在输入格式错误 (JSON) 后被阻止

有没有办法在火花流中展平嵌套的 JSON?

错误:“您的部署没有关联的 swagger.json” - 流分析作业上的 ACI 部署

有没有办法确定作业运行的“起点”?

Terraform Azure 流分析作业 - 开始/停止

Azure 流分析作业降级,没有运行时错误