我遇到了流分析窗口的问题。输入到“我的流分析作业”是一个事件流,包含来自属于信号的传感器/实体的温度读数。每个信号大约有600个实体。一个示例事件应该是这样的。
{
"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
}]
}]我编写了一个Stream查询,以过滤掉事件,如果温度值大于它们各自的阈值,则将一个“警报”插入到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和to,老实说,我并不完全理解窗口功能是如何工作的。这是我的问题..。
我被困在这个问题上已经好几天了,任何帮助都是非常感谢的。
另外,这是我的第一个问题,所以请原谅我的愚蠢。
发布于 2017-06-26 20:29:21
您可以通过滑动窗口来实现这一点。滑动窗口生成每个事件的输出,并回顾所提供的持续时间。在您的示例中,只有在读数低于阈值1小时时才需要输出。下面这样的查询应该可以工作。
SELECT
Entity,
max(Reading) MaxReading
INTO
[YourOutputAlias]
FROM
[YourInputAlias]
group by
Entity,
SlidingWindow(hour,1)
having
MaxReading < 100https://stackoverflow.com/questions/41180285
复制相似问题