【问题标题】:Stream Analytics - query nested arrays returns 0 results流分析 - 查询嵌套数组返回 0 个结果
【发布时间】: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"
					}
				]
			}
		}
	]
}

【问题讨论】:

    标签: json azure azure-sql-database azure-stream-analytics


    【解决方案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
    

    结果

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 1970-01-01
      • 2018-02-11
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多