如何在流分析中查询 JSON 以使包含多个数组值的 JSON 脱离

Posted

技术标签:

【中文标题】如何在流分析中查询 JSON 以使包含多个数组值的 JSON 脱离【英文标题】:How to query JSON to deplane JSON containg more than one array values in Stream analytics 【发布时间】:2018-05-03 17:05:47 【问题描述】:

我想在流分析中查询以下从 IotHub 接收的 JSON 输入数据


            "DeviceId": "12355",
            "Message": 
                        "TimeStamp": ["Time": "1", "Time": "2"],
                        "Streak": "4",
                        "Checkin": ["Time": "3", "Time": "4"],
                        "Status": ""
            

我使用了下面的查询,它在应用交叉后给了我四个输出我只想要两个输出

我希望我的输出采用以下格式。

DeviceID    Streak  TimeStamp   Checkin  Status
  "12355"   "4"     "1"         "3"      ""
  "12355"   "4"     "2"         "4"      ""

这是我使用 Cross Apply 编写的查询

SELECT
 [Stat].[DeviceId] AS [DeviceId],

 [Stat].[Message].[Streak] AS [Streak],
 [Stat].[Message].[Status] AS [Status],
 [Stat].[Message].[Error] AS [Error],
 [Stat].[UseTime].[Time] AS [Checkin],
 [Stat].[Open].[Time] AS [OpenTime]
 INTO
 Messages
FROM
(
 SELECT
 [EventAlias].*,
 [Checkin].[ArrayValue] AS [UseTime],
[OutputTime].[ArrayValue] AS [Open]
 FROM [SmartCapData] AS [EventAlias]
 CROSS APPLY GetArrayElements(EventAlias.Message.Checkin) AS [Checkin]
 CROSS APPLY GetArrayElements(EventAlias.Message.Timestamp) AS [OutputTime]
) AS Stat

在上面它是应用交叉交叉我想并行使用它, 在此先感谢:)

【问题讨论】:

我不确定“deplane”这个词在这里是否正确?如果您可以先转换 JSON,您可以重写它,以便时间戳和签入都是单个结构的属性,并存储这些属性的数组而不是单独的数组。如果可能的话,我想你想要做的是在索引上加入两个数组,但是我以前没有见过 SQL 像这样查询 JSON 来知道这是否可能。 【参考方案1】:

这个查询应该可以解决问题:

SELECT
    inputevents.DeviceId,
    inputevents.Message.Streak, 
    inputevents.Message.Status, 
    a.ArrayValue.Time AS Timestamp, 
    GetRecordPropertyValue(GetArrayElement(inputevents.Message.Checkin, a.ArrayIndex), 'Time') AS Checkin
FROM inputevents
CROSS APPLY GetArrayElements(inputevents.Message.TimeStamp) a

进行复杂 JSON 转换的另一种方法是使用自定义 javascript 函数。

【讨论】:

以上是关于如何在流分析中查询 JSON 以使包含多个数组值的 JSON 脱离的主要内容,如果未能解决你的问题,请参考以下文章

Power BI 未包含在流分析模板 json 中

如何创建检查数组是不是包含值的查询?戈朗戈姆

包含多个 json 值的响应是不是总是必须包装在 java 中的数组中?

如何在流分析中检查 JSON 属性中的空值?

Azure 流分析:如何使用两个 Azure 机器学习函数

获取其 JSON 数组包含具有值的对象的行