Verwenden von Ereignisfenstern

In Anwendungen, die Echtzeitereignisse verarbeiten, ist es allgemein erforderlich, über Teilmengen von Ereignissen, die in einem bestimmten Zeitraum liegen, mengenbasierte Berechnungen (Aggregationen) oder andere Operationen durchzuführen. In StreamInsight werden diese Teilmengen von Ereignissen mithilfe von Fenstern definiert. In diesem Thema werden Fenster und ihre Definition erläutert. Es werden die in StreamInsight unterstützten Fensterarten aufgeführt und erläutert, wie Sie die Fenster mit verschiedenen Operatoren verwenden können.

In diesem Abschnitt

Fenstertypen

Über Fenstern ausgeführte Vorgänge

Grundlegendes zu Fenstern

Ein Fenster enthält Ereignisdaten entlang einer Zeitachse und ermöglicht es Ihnen, verschiedene Vorgänge für die Ereignisse innerhalb dieses Fensters auszuführen. Beispiel: Sie möchten die Werte der Nutzlastfelder in einem gegebenen Fenster summieren, wie in der folgenden Abbildung gezeigt.

Erläutert das Konzept eines Ereignisfensters

In der vorherigen Abbildung wird veranschaulicht, wie ein springendes Fenster auf einen Ereignisdatenstrom und wie ein Aggregat auf den Fensterdatenstrom angewendet wird. Die Form der Ereignisse, die die Aggregationsergebnisse enthalten, ist abhängig von der Ausgaberichtlinie des Fensters – hier werden sie durch Punktereignisse am Ende des Fensters dargestellt.

Der Fenstervorgang wandelt den Ereignisdatenstrom in einen Fensterdatenstrom (CepWindowStream<T>) um. Dieser kann als Grundlage für einen satzbasierten Vorgang dienen. Jedes Fenster entlang der Zeitachse stellt einen Satz von Ereignissen dar. Von der verwendeten Fensterart hängt es ab, wie Ereignisse angeordnet werden: Fenster können zeitbasiert oder anzahlbasiert sein. Jede Fensterart wird durch einen Fensteroperator dargestellt.

Der satzbasierte Vorgang kehrt einen Fensterdatenstrom in einen Ereignisdatenstrom (CepStream<T>) um. Diese setbasierten Vorgänge sind in die folgenden zwei Gruppen unterteilt:

  • Aggregationen, die für einen Satz von Eingabeereignissen ein Skalarergebnis ergeben

  • Vorgänge, die für einen Satz von Eingabeereignissen 0 (null) oder mehr Ausgabeereignisse ergeben.

Beispiele für die erste Gruppe sind sum, avg, count und benutzerdefinierte Aggregate. Eine oder mehrere solche Aggregationen können auf einen Datenstrom im Fenster angewendet werden, sodass ein Ergebnisereignis jedem Eingabefenster entspricht, mit den Skalaraggregationsergebnissen als Felder in der resultierenden Ereignisnutzlast. Sie können z. B. die Werte eines oder mehrerer Nutzlastfelder in einem Fenster addieren und auf Grundlage dieser Werte eine weitere Verarbeitung ausführen oder einen weiteren Ereignisdatenstrom erstellen, der aggregierte Daten enthält.

Beispiele für die zweite Gruppe sind TopK- und benutzerdefinierte Operatoren. Sie werden über einem Datenstrom im Fenster definiert und ergeben als Berechnungsergebnis 0 (null) oder mehrere Ereignisse pro Fenster. Beispiel: Sie können mit dem TopK-Operator die obersten fünf Ereignisse aus den einzelnen Momentaufnahmefenstern entnehmen, die für einen bestimmten Eingabedatenstrom definiert wurden, und einen neuen Ereignisstrom zur weiteren Verarbeitung generieren.

Wenn Ereignisse aus einem Datenstrom im Fenster an einen setbasierten Operator übergeben werden und wenn sie von einem setbasierten Operator zurück in den Datenstrom ausgegeben werden, werden ihre Zeitstempel möglicherweise transformiert. Diese Transformationen werden als Eingaberichtlinie bzw. Ausgaberichtlinie bezeichnet. Diese Richtlinien wirken sich darauf aus, wie die Ereignisse in Fenstern angezeigt werden und wie das Ergebnis des setbasierten Vorgangs aus dem Datenstrom ausgegeben wird.

StreamInsight unterstützt die folgenden Fenstertypen:

Angeben von Fenstern

Wie in der folgenden Abbildung gezeigt, besteht eine Fensterspezifikation aus drei Teilen:

  • Fensterdefinition (Zeiträume für springende Fenster, Anzahl für anzahlbasierte Fenster und kein Parameter für Momentaufnahmefenster)

  • Eine Zeittransformation der Eingabe (Eingaberichtlinie)

  • Eine Zeittransformation der Ausgabe (Ausgaberichtlinie)

Ereignisdatenstroms in benutzerdefinierten Aggregaten

Die Abbildung bietet eine allgemeine Beschreibung der Transformationen eines Datenstroms während eines setbasierten Vorgangs über einem Fenster.

  1. An Punkt A wird ein Datenstrom von Ereignissen in den Fensteroperator eingegeben.

  2. An Punkt B erzeugt der Fensteroperator einen Datenstrom von Fenstern. Jedes Fenster enthält einen Satz von Ereignissen. Die Lebensdauer dieser Ereignisse wurde möglicherweise gemäß der Eingaberichtlinie geändert. Der Datenstrom von Ereignissen wird in einen setbasierten Operator, z. B. eine Aggregation, oder in einen benutzerdefinierten Operator eingegeben.

  3. An Punkt C verarbeitet der setbasierte Operator jedes Fenster und erzeugt einen Datenstrom von Ereignissen als Ausgabe.

    • Bei Aggregaten wird für jedes Set ein Ereignis erstellt (oder 0 (null), wenn das Fenster leer ist). Da die Aggregation nur einen Skalarwert angibt, wird die Lebensdauer des Ausgabeereignisses standardmäßig auf den Fensterzeitraum festgelegt. Dies gilt für integrierte Aggregationen sowie für das Ergebnis benutzerdefinierter Aggregate.

    • Für benutzerdefinierte Operatoren und TopK werden 0 (null) oder mehr Ereignisse erzeugt. Zeitempfindliche UDOs geben außerdem die Lebensdauer von Ausgabeereignissen an. Für zeitunempfindliche UDOs und TopK-Operatoren wird die Lebensdauer des Ausgabeereignisses standardmäßig auf den Fensterzeitraum festgelegt.

  4. An Punkt D kann eine Ausgaberichtlinie auf die Ausgabeereignisse angewendet werden. Dies ermöglicht es dem Abfrageautor, die Zeiteigenschaften der Ereignisse zu ändern und die vom setbasierten Operator erzeugten Standardlebensdauerwerte zu überschreiben.

Die drei weißen Felder in der Abbildung werden programmgesteuert als Parameter für die Fensteroperatoren angezeigt.

Fensterrichtlinien

Fensteroperatoren erstellen Datenströme von Fenstern, bei denen es sich um die erforderliche Eingabe für jeden setbasierten Vorgang handelt. Außer der Definition des Fensters selbst (als Zeit oder Anzahl) kann der Abfrageautor auch beeinflussen, wie 1) sich der Fenstervorgang auf die Lebensdauer der Ereignisse im Fenster auswirkt, wenn sie an den satzbasierten Vorgang übergeben werden und 2) die Lebensdauern der Ergebnisereignisse des Vorgangs angepasst werden können.

Beide Richtlinien werden vom Abfrageautor als Teil des Fensteroperators angegeben, damit die Standardzeitstempel der Aggregation oder UDO über dem Fenster gesteuert oder überschrieben werden können.

Eingaberichtlinien

In dieser Version unterstützt StreamInsight nur eine Eingaberichtlinie, wonach die Start- und Endzeit von Ereignissen im Fenster auf die Start- und Endzeit des Fensters gekürzt wird. Dies bedeutet, dass alle (zeitempfindlichen) satzbasierten Vorgänge Ereigniszeitstempel nur im Fenster sehen, auch wenn sich die ursprünglichen Ereignisse außerhalb des Fensters überschnitten haben, bevor die Eingaberichtlinie angewendet wurde.

Die Spezifikation der Eingaberichtlinie ist optional. Die Klasse WindowInputPolicy stellt einfachheitshalber eine statische Eigenschaft bereit, die eine entsprechende Instanz (WindowInputPolicy.ClipToWindow) zurückgibt.

Ausgaberichtlinien

In dieser Version unterstützt StreamInsight die folgenden Ausgaberichtlinien:

  • Momentaufnahmefenster: Die Endzeiten der resultierenden Ereignisse werden auf die Endzeit des Fensters gekürzt.

  • Springende Fenster unterstützen die folgenden beiden Ausgaberichtlinien:

    • Die resultierenden Ereignisse sind Punktereignisse, die am Fensterende ausgerichtet sind.

    • Die Endzeiten der resultierenden Ereignisse werden auf die Endzeit des Fensters gekürzt.

  • Anzahlfenster: Das resultierende Ereignis wird am Fensterende in ein Punktereignis umgewandelt.

Für jede Fensterart sind eine separate Klasse bzw. mehrere Klassen von Ausgaberichtlinien vorhanden. Die Ausgaberichtlinienklassen stellen jeweils eine statische Eigenschaft zur Verfügung, die eine entsprechende Instanz zurückgibt:

  • SnapshotWindowOutputPolicy.Clip (Standardwert, wenn nicht angegeben)

  • HoppingWindowOutputPolicy.ClipToWindowEnd

  • HoppingWindowOutputPolicy.PointAlignToWindowEnd (Standardwert, wenn nicht angegeben)

  • CountWindowOutputPolicy.PointAlignToWindowEnd (Standardwert, wenn nicht angegeben)

Es folgt eine Zusammenfassung aller verfügbaren Fenster und ihre Auswirkung auf das Ergebnis des satzbasierten Vorgangs:

Momentaufnahmefenster:

Ausgaberichtlinie: immer "Auf Fensterende kürzen"

Ausgabelebensdauer:

ClipToWindowEnd

Integrierte Aggregate

Fenstergröße

TopK

Fenstergröße

Zeitunempfindliches UDA

Fenstergröße

Zeitunempfindliches UDO

Fenstergröße

Zeitunempfindliches UDA/UDO

n/v für Momentaufnahmefenster

Springendes Fenster:

Ausgaberichtlinie: entweder "Auf Fensterende kürzen" oder "PointAlignToWindowEnd"

Ausgabelebensdauer:

ClipToWindowEnd

PointAlignToWindowEnd

Integrierte Aggregate

Fenstergröße

Punkt am Fensterende

TopK

Fenstergröße

Punkt am Fensterende

UDA

Fenstergröße

Punkt am Fensterende

UDO

Fenstergröße

Punkt(e) am Fensterende

Zeitunempfindlicher UDO

zurückgegebene Lebensdauer, auf Fensterende gekürzt

Punkt(e) am Fensterende

Anzahlfenster:

Ausgaberichtlinie: immer "Punkt am Fensterende"

Ausgabelebensdauer:

PointAlignToWindowEnd

Integrierte Aggregate

n/v für Anzahlfenster

TopK

n/v für Anzahlfenster

UDA

Punkt am Fensterende

UDO

Punkt(e) am Fensterende

Zeitunempfindlicher UDO

Punkt(e) am Fensterende

Siehe auch

Konzepte

Aggregationen

TopK

Benutzerdefinierte Aggregate und Operatoren