Sql server 2008 r2 StreamInsight-定义正确窗口时出现问题

Sql server 2008 r2 StreamInsight-定义正确窗口时出现问题,sql-server-2008-r2,streaminsight,Sql Server 2008 R2,Streaminsight,我开始使用StreamInsight,并将其用作wcf服务。 我已经尝试在“Microsoft StreamInsight查询搭便车指南”中寻求帮助,并尝试了codeplex中的示例和示例 我的问题是: My event producer向适配器提供AlertEvent的: public sealed class AlertEvent { public DateTime Date { get; set; } public long IDGroup { get; set; }

我开始使用StreamInsight,并将其用作wcf服务。 我已经尝试在“Microsoft StreamInsight查询搭便车指南”中寻求帮助,并尝试了codeplex中的示例和示例

我的问题是:

My event producer向适配器提供AlertEvent的:

public sealed class AlertEvent
{
    public DateTime Date { get; set; }
    public long IDGroup { get; set; }
    public bool IsToNormalize { get; set; }
    public bool IsError { get; set; }
}
当AlertEvent的IsError=false时,标志IsToNormalize为true

我试图实现的行为是,当我接收到一个带有IsError的流时,我想看看在接下来的“x”分钟内,是否到达任何带有IsToNormalize的alertEvent。然后我发送并输出启动搜索的iErrorAlarmEvent

我所做的是,当我收到一个与过滤器对应的输入时,我会在“x”分钟内延长它的生存期,并创建一个TumblingWindow,以查看在这段时间内是否有另一个带有另一个标志的AlertEvent到达(使用ExtensionMethod迭代窗口中的所有有效负载)

然后,为了获取触发TumblingWindow的AlarmEvent,我与原始输入进行了连接

var resultStream = from e1 in stream
                   join e2 in input
                   on e1.Id equals e2.DigitalTag
                   where e1.NormEvents != 0
                   select e2;
这根本不起作用…:/有什么办法可以帮助解决这个问题吗

我的另一个疑问是,是否会为通过过滤器的每个输入创建一个带有新startDate的新窗口,还是只创建一个tumblingWindow

谢谢。

试试这个:

// Move all error events
// to the point where the potential timeout would occur.
var timedOut = input
                   .Where(e => e.IsError == true)
                   .ShiftEventTime(e => e.StartTime + TimeSpan.FromMinutes(5));

// Extend all events IsToNormalize by the timeout.
var following = input
                   .Where(e => e. IsToNormalize == true)
                   .AlterEventDuration(e => TimeSpan.FromMinutes(5));

// Mask away the potential timeout events by the extended events.
// - If IsToNormalize did not occur within the timeout, then the shifted error event
// will remain unchanged by the left-anti-semi-join and represent
// the desired output.
var result = from t in timedOut
             where (from c in following
                    where t.IdGroup == c.IdGroup
                    select c).IsEmpty()
             select t; // or some projection on t

@米奇·麦特:你为什么需要这种激励来帮助别人?如果你不想帮忙,那就不要。我看不出有什么问题…@Megacan:每个人都需要激励。
// Move all error events
// to the point where the potential timeout would occur.
var timedOut = input
                   .Where(e => e.IsError == true)
                   .ShiftEventTime(e => e.StartTime + TimeSpan.FromMinutes(5));

// Extend all events IsToNormalize by the timeout.
var following = input
                   .Where(e => e. IsToNormalize == true)
                   .AlterEventDuration(e => TimeSpan.FromMinutes(5));

// Mask away the potential timeout events by the extended events.
// - If IsToNormalize did not occur within the timeout, then the shifted error event
// will remain unchanged by the left-anti-semi-join and represent
// the desired output.
var result = from t in timedOut
             where (from c in following
                    where t.IdGroup == c.IdGroup
                    select c).IsEmpty()
             select t; // or some projection on t