使用HoppingWindow上的过滤器进行StreamInsight复杂查询

时间:2012-10-10 12:44:12

标签: linq streaminsight

我正在尝试使用StreamInsight,但我遇到了一个需要查询的问题。

如果在过去30分钟内我的测量值(最多变化20%)发生了一些变化,我试图发出警告。

这是我现在提出的查询,但它不起作用,我认为它甚至不正确。

显然我无法在窗口上过滤......?

var deviationQuery = from s in wcfStream
                     group s by s.SensorId into grouped
                     from window in grouped.HoppingWindow(TimeSpan.FromMinutes(30),TimeSpan.FromMinutes(1))
                     where window.StdDev(e => e.Value) > measurableValue * 1.2
                     select new OutputEvent
                     {
                         Error = "Deviation"
                     };

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果我理解正确,这就是你想要做的事情:

  1. SensorId
  2. 对流进行分组
  3. 将每组分成30分钟的窗口。
  4. 为具有太多错误值的窗口写一条错误消息。
  5. 这应该做到,希望如此。

    var deviationQuery = from s in wcfStream
                         group s by s.SensorId into grouped
                         from window in grouped.HoppingWindow(TimeSpan.FromMinutes(30),TimeSpan.FromMinutes(1))
                         where window.Count(event => event.Value > maxValue) > maxIncorrectValues                        
                         select new OutputEvent
                         {
                             Error = "Deviation"
                         };
    

答案 1 :(得分:1)

我找到了解决问题的工作查询。起初我认为它不起作用,但我误解了结果。 它可能不是最短和最好的查询,所以如果你有更好的答案,请告诉我!

var deviationQuery = from s in wcfStream
                     where s.Value > measurableValue * (1 + deviationThreshold) || s.Value < measurableValue * (1 - deviationThreshold)
                     group s by s.SensorId into grouped
                     from window in grouped.HoppingWindow(TimeSpan.FromSeconds(180), TimeSpan.FromSeconds(120))
                     select window.Count();
var deviation = from c in deviationQuery
                where c > maxIncorrectValues
                select new OutputEvent
                    {
                        M = new Measurement() { SensorId = "354354", Value = 53, Time = DateTime.Now },
                        Deflection = c,
                        Error = "Deviation"
                    };