我在流分析窗口方面遇到了一些麻煩。我的流分析作業的輸入是一個事件流,其中包含來自屬於信號的傳感器/實體的溫度讀數。每個信號都有大約600個實體。示例事件看起來像這樣。Azure流分析窗口
{
"SignalId": "1",
"EntityId": "1",
"Temperature": 78
}
流分析正在從參考數據blob中讀取每個實體的閾值,該參數數據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
}]
}]
我寫了一個流分析查詢篩選出事件並插入一個「報警」到Azure的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
我現在需要的是在這上面放一個滑動窗口(我假設)。我只想創建一個「報警」,如果一個實體的溫度值連續超過其相應的閾值1小時。插入的行應該包含與窗口中最後一個事件相關的數據。
我是Stream Analytics和T-SQL的新手,並且實際上並不完全瞭解窗口函數的工作原理。這裏是我的問題...
如果我得到壞的事件(在溫度大於閾值)連續使用30分鐘,然後得到一個很好的事件,是有可能寫出一個查詢,使得一個新的窗口從下一個不良事件開始?
是否可以選擇窗口中最後一個事件的數據?我嘗試使用LAST()和LAG(),但它給了我一個編譯錯誤,說「不能使用GROUP BY沒有聚合函數」。問題是我不需要一個聚合函數只是最後一個事件值。
我一直堅持這個問題幾天,任何幫助將不勝感激。
此外,這是我的第一個問題,所以請原諒我的noobishness