流分析 - 查询嵌套数组返回 0 个结果
Posted
技术标签:
【中文标题】流分析 - 查询嵌套数组返回 0 个结果【英文标题】:Stream Analytics - query nested arrays returns 0 results 【发布时间】:2017-06-05 00:04:12 【问题描述】:我有一个消息数组;在每条消息中是另一个开始/停止值数组。我可以很好地获取消息数组,但是在 Azure 中执行流分析查询时,获取下一级嵌套的开始/停止值会返回 0 条记录。
这是流分析查询。
WITH
main AS
(
SELECT message.ArrayValue.header.messageId,
message.ArrayValue.startStopBlock as SSBlock
FROM IoTHub i
CROSS APPLY GetArrayElements(i.[STARTSTOPTIME:topic].message) AS
message
)
SELECT m.messageId,
SSEntry.ArrayValue.start,
SSEntry.ArrayValue.stop
FROM main m
CROSS APPLY GetArrayElements(m.SSBLOCK.ArrayValue.startStop) AS SSEntry
这是json
"@xsi:schemaLocation" : "",
"nextBuffer" :
"url" : "",
"moreData" : "false"
,
"message" : [
"header" :
"messageId" : "951262328",
,
"totalStartStops" : "2",
"startStopBlock" :
"startStop" : [
"start" : "2017-05-16 14:11:01",
"stop" : "2017-05-16 14:14:16",
"operatorId" : "0"
,
"start" : "2017-05-16 14:38:45",
"stop" : "2017-05-16 14:44:19",
"operatorId" : "0"
]
,
"header" :
"messageId" : "951266462",
,
"totalStartStops" : "2",
"startStopBlock" :
"startStop" : [
"start" : "2017-05-16 14:08:09",
"stop" : "2017-05-16 14:08:20",
"operatorId" : "-1"
,
"start" : "2017-05-16 14:54:38",
"stop" : "2017-05-16 15:01:17",
"operatorId" : "-1"
]
]
【问题讨论】:
【参考方案1】:根据我的理解,您可以尝试通过将 message.ArrayValue.startStopBlock as SSBlock
更改为 message.ArrayValue.startStopBlock.startStop as SSBlock
来检索第一个查询中的嵌套数组。这是我的测试,你可以参考一下:
查询
WITH main AS
(
SELECT
message.ArrayValue.header.messageId,
message.ArrayValue.startStopBlock.startStop as SSBlock
FROM IoTHub i
CROSS APPLY GetArrayElements(i.message) AS message
)
SELECT
m.messageId,
SSEntry.ArrayValue.start,
SSEntry.ArrayValue.stop
FROM main m
CROSS APPLY GetArrayElements(m.SSBLOCK) AS SSEntry
结果
【讨论】:
以上是关于流分析 - 查询嵌套数组返回 0 个结果的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用
返回 2 个“同步”嵌套查询(Express、Mongoose)的响应
查询未返回唯一结果:4;嵌套异常是 javax.persistence.NonUniqueResultException:查询没有返回唯一结果:4