2017-06-05 1 views
0

J'ai un tableau de messages; dans chaque message se trouve un autre tableau de valeurs de début/fin. Je peux obtenir le tableau de messages correctement, mais l'obtention du niveau suivant de valeurs de démarrage/arrêt imbriquées renvoie 0 enregistrements lors de l'exécution d'une requête d'analyse de flux dans Azure.Stream Analytics - requête tableaux imbriqués renvoie 0 résultats

Voici la requête Stream Analytics.

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 

Voici le JSON

{ 
 
\t "@xsi:schemaLocation" : "", 
 
\t "nextBuffer" : { 
 
\t \t "url" : "", 
 
\t \t "moreData" : "false" 
 
\t }, 
 
\t "message" : [{ 
 
\t \t \t "header" : { 
 
\t \t \t \t "messageId" : "951262328", 
 
\t \t \t }, 
 
\t \t \t "totalStartStops" : "2", 
 
\t \t \t "startStopBlock" : { 
 
\t \t \t \t "startStop" : [{ 
 
\t \t \t \t \t \t "start" : "2017-05-16 14:11:01", 
 
\t \t \t \t \t \t "stop" : "2017-05-16 14:14:16", 
 
\t \t \t \t \t \t "operatorId" : "0" 
 
\t \t \t \t \t }, { 
 
\t \t \t \t \t \t "start" : "2017-05-16 14:38:45", 
 
\t \t \t \t \t \t "stop" : "2017-05-16 14:44:19", 
 
\t \t \t \t \t \t "operatorId" : "0" 
 
\t \t \t \t \t } 
 
\t \t \t \t ] 
 
\t \t \t } 
 
\t \t }, { 
 
\t \t \t "header" : { 
 
\t \t \t \t "messageId" : "951266462", 
 
\t \t \t }, 
 
\t \t \t "totalStartStops" : "2", 
 
\t \t \t "startStopBlock" : { 
 
\t \t \t \t "startStop" : [{ 
 
\t \t \t \t \t \t "start" : "2017-05-16 14:08:09", 
 
\t \t \t \t \t \t "stop" : "2017-05-16 14:08:20", 
 
\t \t \t \t \t \t "operatorId" : "-1" 
 
\t \t \t \t \t }, { 
 
\t \t \t \t \t \t "start" : "2017-05-16 14:54:38", 
 
\t \t \t \t \t \t "stop" : "2017-05-16 15:01:17", 
 
\t \t \t \t \t \t "operatorId" : "-1" 
 
\t \t \t \t \t } 
 
\t \t \t \t ] 
 
\t \t \t } 
 
\t \t } 
 
\t ] 
 
}

Répondre

0

par ma compréhension, vous pouvez essayer de récupérer les tableaux imbriqués dans votre première requête en changeant message.ArrayValue.startStopBlock as SSBlock à message.ArrayValue.startStopBlock.startStop as SSBlock. Voici mon test, vous pouvez vous y référer:

Recherche

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 

Résultat enter image description here

+0

de travail Nice, exactement ce que je avais besoin! –