0

StreamInsight を使い始め、wcf サービスとして使用しています。私は既に " Microsoft StreamInsight クエリのヒッチハイク ガイド" で助けを求めようとし、例と codeplex の例を試しました。

私の問題はこれです:

私のイベント プロデューサーは、アダプターに 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 でアラートイベントが到着するかどうかを確認したいと思います。次に、検索を開始した IsError AlarmEvent を送信して出力します。

私が行ったことは、フィルターに対応する入力を受け取ったときに、その有効期間を「x」分延長し、TumblingWindow を作成して、その期間に別の AlertEvent が他のフラグで到着するかどうかを確認することです (ExtensionMethod を使用して反復します)。ウィンドウ内のすべてのペイロードを介して)。

var stream= from item in input
            where item.IsError
            group item by item.IdGroup into eachGroup
            from window in eachDigital.AlterEventDuration(e => TimeSpan.FromMinutes((double)1.5)).TumblingWindow(TimeSpan.FromSeconds(15), HoppingWindowOutputPolicy.ClipToWindowEnd)
            select new
            {
                Id = eachDigital.Key,
                NormEvents = window.HasNormalizationEvents(),
                Count = window.Count()
            };

次に、TumblingWindow をトリガーした AlarmEvent を取得するために、元の入力と結合しました。

var resultStream = from e1 in stream
                   join e2 in input
                   on e1.Id equals e2.DigitalTag
                   where e1.NormEvents != 0
                   select e2;

これはまったく機能していません... :/ この問題の解決に役立つアイデアはありますか?

私が持っているもう1つの疑問は、フィルターを通過する入力ごとに新しいstartDateを持つ新しいウィンドウを作成するか、それともタンブリングウィンドウを1つだけ作成するかということです。

ありがとう。

4

1 に答える 1

2

これを試して:

// 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
于 2011-05-27T17:44:19.420 に答える