2016-12-16 7 views
0

Stream Analytics Windowing에 문제가 있습니다. 스트림 분석 작업에 대한 입력은 신호에 속하는 센서/엔티티의 온도 판독 값이 포함 된 이벤트 스트림입니다. 모든 신호에는 약 600 개의 요소가 있습니다. 샘플 이벤트는 다음과 같습니다.Azure Stream Analytics Windowing

{ 
    "SignalId": "1", 
    "EntityId": "1", 
    "Temperature": 78 
} 

스트림 분석은 이와 비슷한 모양의 참조 데이터 blob에서 각 항목에 대한 임계 값을 읽습니다.

[{ 
    "SignalId": "1", 
    "Entities": [{ 
     "Id": 1, 
     "Threshold": 60 
     }, { 
      "Id": 2, 
      "Threshold": 108 
     }, { 
      "Id": 3, 
      "Threshold": 106 
     }] 
}, { 
    "SignalId": "2", 
    "Entities": [{ 
     "Id": 1, 
     "Threshold": 65 
    }, { 
     "Id": 2, 
     "Threshold": 120 
    }, { 
     "Id": 3, 
     "Threshold": 107 
    }] 
}] 

나는 이벤트를 필터링 및 온도 값이 각각의 임계 값보다 큰 경우 푸른 SQL 데이터베이스로의 "알람"을 삽입 할 스트림 분석 쿼리를 작성했습니다.

SELECT 
    e.SignalId AS SignalId, 
    e.EntityId AS EntityId, 
    e.Temperature AS AttrValue, 
    entities.ArrayValue.Threshold AS Threshold, 
    SYSTEM.TIMESTAMP AS EventTimestamp 
INTO 
    output 
FROM 
    eventhub e 
JOIN 
    referenceblob b 
ON 
    e.SignalId = b.SignalId 
CROSS APPLY 
    GetElements(b.Entities) entities 
WHERE 
    e.EntityId = entities.ArrayValue.Id 
AND 
    e.Temperature > entities.ArrayValue.Threshold 

지금 내가 필요한 것은 슬라이딩 윈도우 (Sliding Window)를 설치하는 것입니다. 엔티티의 온도 값이 1 시간 동안 연속적으로 해당 임계 값을 넘으면 "경보"만 작성하려고합니다. 삽입 된 행에는 창에 마지막 이벤트와 관련된 데이터가 있어야합니다.

저는 Stream Analytics와 T-SQL을 처음 접했고 솔직히 윈도우 잉 기능이 어떻게 작동하는지 정확히 이해하지 못했습니다. 여기 내 질문은 ...

  1. 내가 (온도가 임계 값보다 큰 경우) 30 분 동안 지속적으로 나쁜 이벤트를 얻을하고 좋은 이벤트를 얻을 경우, 새 창이 그러한 쿼리를 작성할 수 있습니다 다음 나쁜 사건부터 시작 되니?

  2. 창에서 마지막 이벤트에 대한 데이터를 선택할 수 있습니까? 나는 LAST() 및 LAG()를 사용하여 시도했지만 "집계 함수없이 GROUP BY를 사용할 수 없다"는 컴파일 오류가 발생했습니다. 문제는 내가 마지막 이벤트 값만 Aggregate 함수가 필요 없다는 것입니다.

나는이 문제에 며칠 동안 붙어 있었고 어떤 도움을 주시면 대단히 감사하겠습니다.

또한,이 내 첫 번째 질문은 그래서 당신은 슬라이딩 윈도우와이를 구현 할 수 있습니다 내 noobishness

답변

0

을 용서하십시오입니다. 슬라이딩 윈도우는 모든 이벤트에 대한 출력을 생성하고 제공된 기간을 되돌립니다. 귀하의 예에서, 읽기가 1 시간 동안 임계 값 이하일 때만 출력을 원합니다. 아래의 쿼리가 작동합니다.

SELECT Entity, max(Reading) MaxReading INTO [YourOutputAlias] FROM [YourInputAlias] group by Entity, SlidingWindow(hour,1) having MaxReading <100