2017-01-26 1 views
0

Étant donné un flux JSON qui ressemble à:Comment injecter (append) une moyenne fenêtré dans la sortie en utilisant MS flux Analytics

{ "timestamp": "2017-01-26T20:27:26.099Z", "Novato": { "humidity": "40.996", "barometric": "1011.2" }, "Redmond": { "humidity": "60.832", "barometric": "1011.8" } }

Pour chaque ville dans cet objet, je veux ajouter une nouvelle valeur appelée humidity_5_second_avg, qui correspond à une moyenne de 5 secondes.

Mais bien sûr, pour chaque ville, elle doit être unique à cette ville. Et je veux l'ajouter aux valeurs des villes existantes.

Par exemple:

{ "timestamp": "2017-01-26T20:27:26.099Z", "Novato": { "humidity": "40.996", "barometric": "1011.2", "humidity_5_second_avg": "38.1234" }, "Redmond": { "humidity": "60.832", "barometric": "1011.8", "humidity_5_second_avg": "32.1234" } }

Est-ce possible avec une requête Analytics Stream? Ou devrais-je créer deux flux (l'un avec les données d'origine et l'autre avec les données moyennes, et les fusionner ensemble?)

Répondre

1

Il est difficile d'obtenir exactement la description. une ligne par ville, puis utilisez REJOIGNEZ

-- Use CROSS APPLY to split original events into one row per city 
WITH CityData AS 
(
    SELECT 
     r.PropertyName AS City, 
     r.PropertyValue.* 
    FROM localinput i TIMESTAMP BY timestamp 
    CROSS APPLY GetRecordProperties(i) r 
    WHERE r.PropertyValue.humidity IS NOT NULL 
), 
Averages AS 
(
    SELECT 
     City, 
     AVG(humidity) as avg_humidity 
    FROM CityData 
    GROUP BY city, TumblingWindow(second, 5) 
) 

SELECT *, System.Timestamp as ts INTO debug FROM Averages 

SELECT 
    c.*, a.avg_humidity 
FROM CityData c 
JOIN Averages a 
ON c.City = a.City AND DATEDIFF(second, c, a) BETWEEN 0 AND 5 
+0

J'ai enlevé cette ligne. '' ' SELECT *, System.Timestamp comme ts eN débugger Moyennes ' '' et changé localinput à mon entrée, ajouté un '' 'INTO''' clause dans le dernier '' 'SELECT''' requête, et cela a fonctionné comme un charme (a pris quelques minutes pour que le système commence à produire des résultats - alors soyez patient :) Merci beaucoup! – Geremy