流分析 - 查询嵌套数组返回 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 聚合查询深度嵌套数组删除空结果并填充引用

如何在 Azure 流分析中展平嵌套的 json 数据

返回 2 个“同步”嵌套查询(Express、Mongoose)的响应

查询未返回唯一结果:4;嵌套异常是 javax.persistence.NonUniqueResultException:查询没有返回唯一结果:4

Laravel 查询生成器。返回嵌套结构化数据

如何在嵌套数组中找到值然后返回该父级? [关闭]