Anzahlfenster

Ein Anzahlfenster definiert eine Teilmenge von Ereignissen, die in einem bestimmten Zeitraum stattfinden, und für die Sie eine satzbasierte Berechnung (z. B. eine Aggregation) ausführen können. Anzahlfenster wie Momentaufnahmefenster haben keine feste Fenstergröße. Sie werden durch die Anzahl der Ereignisse definiert, die sie enthalten. Dies ermöglicht eine Reihe von Szenarien, in denen ein satzbasierter Vorgang auf eine bestimmte Anzahl von Ereignissen in einem Datenstrom angewendet wird, der eine unregelmäßige Ereignisfrequenz aufweist.

TippTipp

In dieser Version von StreamInsight können Anzahlfenster nur mit benutzerdefinierten Aggregaten oder benutzerdefinierten Operatoren verwendet werden, jedoch nicht mit integrierten Aggregaten und TopK.

Eine allgemeine Beschreibung der Ereignisfenstern sowie ihrer Implementierung und Verwendung in StreamInsight finden Sie unter Verwenden von Ereignisfenstern.

Grundlegendes zu Anzahlfenstern

Die variable Fenstergröße von Anzahlfenstern wird durch die Anzahl unterschiedlicher Ereignisstartzeiten entlang einer Zeitachse definiert. Der Satz von Anzahlfenstern mit der Anzahl N ist definiert als alle Zeiträume, die N aufeinander folgende Ereignisstartzeiten enthalten, wobei N mindestens 1 ist. Genauer gesagt, endet jeder solche Zeitraum an der Startzeit plus eine Zeiteinheit des N-ten unterschiedlichen Ereignisses. Anzahlfenster werden mit jeder unterschiedlichen Ereignisstartzeit entlang der Zeitachse verschoben. Daher verursacht jedes neue Ereignis, das eine neue Ereignisstartzeit definiert, die Erstellung eines neuen Anzahlfensters, solange die Anzahl erfüllt wird. Das heißt, solange die Anzahl der unterschiedlichen Ereignisstartzeiten kleiner als N ist, wird kein neues Fenster erstellt. Wie bei springenden Fenstern wird der Offset zwischen Anzahlfenstern als Sprunggröße bezeichnet, jedoch ist die Sprunggröße für Anzahlfenster im Allgemeinen nicht konstant.

Wenn jedes Ereignis auf der Zeitachse über einen eindeutigen Zeitstempel verfügt, ist die Anzahl von Ereignissen in jedem solchen Fenster gleich N. Bei mehreren Ereignissen mit der gleichen Ereignisstartzeit ist die Anzahl der enthaltenen Ereignisse größer als N. Dieses Verhalten muss berücksichtigt werden, wenn eine Aggregation auf das Fenster angewendet wird.

Die folgende Abbildung zeigt einen Datenstrom mit drei Ereignissen: e1, e2 und e3. Die senkrechten Striche stellen die Anzahlfenstergrenzen dar, die durch diese Ereignisse definiert werden. Die hellblauen Ereignisdatenströme stellen die Ereignisdatenströme dar, die sich entlang der Zeitachse bewegen. Die orangefarbenen Felder stellen die Anzahlfenster und die in jedem Fenster enthaltenen Ereignisse dar. Die ersten beiden unterschiedlichen Ereignisstartzeiten gehören zu e1 und e2, und das erste Anzahlfenster erstreckt sich über den entsprechenden Zeitraum. Es beginnt mit der Startzeit von e1 und endet mit der Startzeit von e2 plus eine Zeiteinheit. Das zweite Fenster enthält die Startzeiten von e2 und e3:

Anzahlfenster für Ereignisse

Beachten Sie, dass in dieser Abbildung die Ereignisse in den Fenstern angezeigt werden, die aufgrund der Eingaberichtlinie für das Fenster bereits verkürzt wurden. Die Eingaberichtlinie sieht für alle StreamInsight-Fenster vor, dass die Ereignisse auf die Fenstergröße zugeschnitten werden. Zeitempfindliche Aggregate oder Operatoren verwenden statt der ursprünglichen Ereignislebensdauern diese zugeschnittenen Lebensdauern in den Fenstern.

Die folgende Abbildung zeigt Anzahlfenster mit Punktereignissen, die nur für einen einzelnen Zeitpunkt gültig sind. Dies veranschaulicht außerdem, dass die CountByStartTimeWindow()-Methode statt der Ereignisse selbst unterschiedliche Ereignisstartzeiten zählt. Die Abbildung stellt einen Datenstrom von Punktereignissen dar. Die senkrechten Striche stellen die Startzeiten der Anzahlfenster dar, die von den Punktereignissen definiert werden. Die hellblauen Ereignisdatenströme stellen die Ereignisdatenströme dar, die sich entlang der Zeitachse bewegen. Beachten Sie, dass zwei Ereignisse zur gleichen Zeit angeordnet werden. Die orangefarbenen Felder stellen die Anzahlfenster und die in jedem Fenster enthaltenen Ereignisse dar. Die beiden angeordneten Ereignisse zählen hinsichtlich des Fensterparameters N als eine Einheit.

Anzahlfenster

Im Fall von Punktereignissen führt das Verhalten des Fensters, wonach der Startzeit des N-ten Ereignisses beim Definieren der Fensterendzeit eine Zeiteinheit hinzugefügt wird, dazu, dass das Fenster alle zugehörigen Ereignisse enthält.

Definieren von Anzahlfenstern

Ein Anzahlfenster wird durch die Anzahl unterschiedlicher Ereignisstartzeiten entlang der Zeitachse definiert. Ein Anzahlfenster wird in Language Integrated Query (LINQ) angegeben, wie im folgenden Beispiel gezeigt. Die Eingaberichtlinie ist immer ClipToWindow, und die Ausgaberichtlinie ist immer PointAlignToWindowEnd.

var agg = from w in inputStream.CountByStartTimeWindow(10)
          select new { sum = w.MySum(e => e.i) };

Da Anzahlfenster gegenwärtig nicht mit integrierten Aggregaten verwendet werden können, wird im obigen Beispiel vom benutzerdefinierten Aggregat MySum ausgegangen.

Wie bei jedem anderen Fenster wird die Fensterausgaberichtlinie auf das Ergebnis des satzbasierten Vorgangs angewendet. Die einzige verfügbare Ausgaberichtlinie für Anzahlfenster sieht die Erstellung eines Punktereignisses am Ende des Fensters vor. Der Zeitstempel des Zeitpunkts fällt mit der letzten Ereignisstartzeit im Fenster zusammen. Das Punktereignis liegt also immer noch innerhalb der Fensterspanne. Nach Anwendung einer Aggregation der Eingabe des oben gezeigten Diagramms sieht der Ausgabedatenstrom wie folgt aus:

Anzahlfenster mit Aggregationsergebnissen

Für einen zeitempfindlichen benutzerdefinierten Operator (UDO), in dem der UDO Ergebnisereignisse einschließlich Zeitstempel erzeugen kann, werden die Zeitstempel von der Ausgaberichtlinie überschrieben. Jedes Ereignis, das der UDO zurückgibt, wird in ein Punktereignis am Ende des Fensters umgewandelt, sodass der Punkt an der Startzeit des letzten Ereignisses im Fenster ausgerichtet ist, genau wie das im vorherigen Diagramm angezeigte einzelne Ergebnisereignis von einer Aggregation.

Siehe auch

Konzepte

Aggregationen

TopK

Benutzerdefinierte Aggregate und Operatoren

Springende Fenster

Momentaufnahmefenster