如何在流分析中查询 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 脱离的主要内容,如果未能解决你的问题,请参考以下文章