流分析 - 查询嵌套数组 returns 0 个结果

Stream Analytics - query nested arrays returns 0 results

我有一系列消息;每条消息中都有另一个 start/stop 值数组。我可以很好地获取消息数组,但是在 Azure 中执行流分析查询时获取下一级嵌套 start/stop 值 returns 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"
     }
    ]
   }
  }
 ]
}

据我了解,您可以尝试通过将 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

结果