2017-07-25 1 views
0

Je diffuse des messages d'événement contenant un champ posix/heure. J'essaie de calculer dans quelle période j'ai reçu une série de messages d'un appareil.Obtention du laps de temps pendant lequel une série de messages est reçue dans les analyses de flux

Supposons que l'entrée suivante (simplifiée):

[ 
    { "deviceid":"device01", "epochtime":1500975613660 }, 
    { "deviceid":"device01", "epochtime":1500975640194 }, 
    { "deviceid":"device01", "epochtime":1500975649627 }, 
    { "deviceid":"device01", "epochtime":1500994473225 }, 
    { "deviceid":"device01", "epochtime":1500994486725 } 
] 

Le résultat de mon calcul doit être un message comme {deviceid, début, fin} pour chaque ID de périphérique. Je suppose qu'un nouveau délai commence, si l'intervalle de temps entre deux événements est plus long qu'une heure. Dans mon exemple, cela se traduirait par deux transmissions:

[ 
{"deviceid":"device01", "start":1500975613660, "end"=1500975649627}, 
{"deviceid":"device01", "start":500994473225, "end"=1500994486725} 
] 

je peux convertir le temps d'époque selon l'exemple 2 dans la documentation https://msdn.microsoft.com/en-us/library/azure/mt573293.aspx. Cependant, je ne peux pas utiliser l'horodatage converti avec la fonction LAG dans une sous-requête. Toutes les valeurs de previousTime sont nulles dans la sortie. Je ne suis pas sûr comment je peux effectuer mon calcul et quelle est la meilleure façon de le faire. J'ai besoin de comprendre le début et la fin d'une série d'événements.

Toute aide est très appréciée.

Répondre

1

I légèrement modifié votre requête ci-dessous afin d'obtenir le résultat escompté:

WITH STEP1 AS (
    SELECT 
    [deviceid] AS deviceId, 
    System.Timestamp AS ts, 
    LAG(DATEADD(millisecond, epochtime, '1970-01-01T00:00:00Z')) OVER (LIMIT DURATION(hour, 24)) as previousTime 
    FROM 
    input TIMESTAMP BY DATEADD(millisecond, epochtime, '1970-01-01T00:00:00Z') 
) 
SELECT * from STEP1 

Le problème est « ts » a été défini à l'étape actuelle, mais lorsque vous utilisez LAG vous regardez le message d'origine à venir à partir de l'instruction FROM, et il ne contient pas la variable "ts". Informez-moi si vous avez des questions.

Merci,

JS - Azure Flux équipe Google Analytics

+1

Merci beaucoup. J'ai pensé que je peux référencer ce champ aussi dans la requête elle-même. –