2017-01-26 1 views
0

이 유사한 JSON 스트림을 감안할 사용하여 출력으로 윈도우 평균 주입 (추가) 방법 :는 MS 스트림 분석

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

각 도시의 경우이 객체에를, 나는라는 새로운 가치를 추가 할 humidity_5_second_avg, 이는 5 초의 텀블링 평균입니다.

물론 각 도시마다 해당 도시마다 고유해야합니다. 그리고 그것을 기존 도시의 가치에 덧붙이고 싶습니다. 예를 들어

:

{ "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" } }

이는 스트림 웹 로그 분석 쿼리 수 있습니까? 또는 두 개의 스트림을 생성해야합니까 (하나는 원본 데이터로, 다른 하나는 평균 데이터로 병합하여 하나의 데이터로 병합해야합니까?)

답변

1

설명 된 방식대로 정확하게 처리하는 것은 까다 롭습니다. 도시 정보를 도시 당 하나의 행 먼저 다음 조인을 사용

-- 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

내가이 줄을 제거 :. ''' SELECT *, System.Timestamp 평균''' 과에 localinput 변경 FROM 디버그 INTO TS로 내 입력 됨, 추가됨 ​​ '''INTO''' 절 마지막으로 '''SELECT'' 질의로, 그리고 그것은 매력처럼 작동했습니다. (시스템이 결과를 내기 시작하는 데 몇 분이 걸렸습니다. – Geremy