This generic operator allows the definition of different kinds of pattern (e.g. all, any). For sequence based patterns see SASE operator (below). In the following the implemented pattern types are desribed.
type
: What kind of pattern should be detected. See below for all supported types and exampleseventTypes
: Describes the types of the input portstime
: If there should be a temporal context (window) this states the time andtimeUnit
is the unit of this timesize
: For element based windows, this is the count of elements that are treated together, size and time can be used togetherassertions
: Predicate over the input data that must be fullfilled to create an outputoutputmode
: states, what the operator should deliver:return
parameter to create the outputinputPort
return
: see outputmode
/EXPRESSIONinputPort
: see outputmode
/INPUTDie Anfrage wählt zu einem Gebot, mit einemWert höher als 200, und zu der Person, die das Gebot abgegeben hat, die ID und den Namen der Person und den Preis des Gebots aus. Berücksichtigt werden nur Personen und Gebote, die nicht älter als 10 min sind. Zusammenfassend könnte man also sagen, dass die Anfrage die Personen auswählt, die innerhalb von 10 min nach ihrem Erscheinen bereits ein Gebot mit einem Wert über 200 abgeben.
assertions, time, timeUnit, size, outputMode, return, inputPort
time und size legen fest, wie lange bzw. wie viele Events zwischengespeichert werden
PATTERN({type = 'ALL', eventTypes = ['person', 'bid'], time = 10, timeUnit = 'MINUTES', assertions = ['person.id = bid.bidder && bid.price > 200'], outputmode = 'EXPRESSIONS', return = ['person.id', 'person.name', 'bid.price']}, person, bid) |
Die Anfrage wählt jedes Gebot mit einem Wert höher als 200 aus.
assertions, outputMode, return, inputPort
Die i-te Assertion gilt jeweils nur für Events des Typs, der an i-ter Stelle der relevanten Event-Typ-Liste steht.
PATTERN({type = 'ANY', eventTypes = ['bid'], assertions = ['bid.price > 220'], outputMode = 'INPUT'}, bid) |
Die Anfrage erkennt, wenn 400 Millisekunden kein Gebot abgegeben wurde.
assertions, time, timeUnit, outputMode
Erfolg und Genauigkeit ist abhängig von den Heartbeats. Als Ausgabemodus ist nur SIMPLE möglich.
PATTERN({type = 'ABSENCE', eventTypes = ['bid'], outputMode = 'SIMPLE', time = 400}, bid) |
Die Anfrage ist erfüllt, sobald mehr als 20 Gebote abgegeben wurden.
assertions, outputMode, return, inputPort
Beruht momentan auf dem Any-Pattern, das als Eingabe eine Aggregation von außen bekommt.
PATTERN({type = 'FUNCTOR', eventTypes = ['aggr'], assertions = ['count_price > 20']}, AGGREGATE({aggregations = [['COUNT', 'price', 'count_price', 'double']]}, bid)) |
Die Anfrage ist erfüllt, sobald der maximale Wert eines Gebots 300 übersteigt.
assertions, outputMode, return, inputPort
Beruht momentan auf dem Any-Pattern, das als Eingabe eine Aggregation von außen bekommt.
PATTERN({type = 'FUNCTOR', eventTypes = ['bid'], assertions = ['max_price > 300']}, AGGREGATE({aggregations=[['MAX', 'price', 'max_price', 'double']]}, bid)) |
Die Anfrage ist erfüllt, solange der minimale Wert eines Gebots größer als 50 und kleiner als 100 ist.
assertions, outputMode, return, inputPort
Beruht momentan auf dem Any-Pattern, das als Eingabe eine Aggregation von außen bekommt.
PATTERN({type = 'FUNCTOR', eventTypes = ['bid'], assertions = ['min_price > 50 && min_price < 100']}, AGGREGATE({aggregations=[['MIN', 'price', 'min_price', 'double']]}, bid)) |
Die Anfrage ist erfüllt, wenn das arithmetische Mittel eines Gebotes kleiner als 140 ist.
assertions, outputMode, return, inputPort
Beruht momentan auf dem Any-Pattern, das als Eingabe eine Aggregation von außen bekommt.
PATTERN({type = 'FUNCTOR', eventTypes = ['bid'], assertions = ['avg_price < 140']}, AGGREGATE({aggregations=[['AVG', 'price', 'avg_price', 'double']]}, bid)) |
Die Anfrage wählt alle sechs Sekunden die drei höchsten Gebote aus.
attribute, count, time oder size
assertions, outputMode, return, inputPort, timeUnit
Der Ausgabemodus SIMPLE ist zwar möglich, macht aber nicht soviel Sinn.
PATTERN({type = 'RELATIVE_N_HIGHEST', eventTypes = ['bid'], attribute = 'price', count = 3, time = 6, timeUnit = 'SECONDS', outputmode = 'expressions', return = ['bid.timestamp', 'bid.bidder', 'bid.price']}, bid) |
Die Anfrage wählt alle sechs Sekunden aus den Geboten, die höher als 80 sind, die drei niedrigsten Gebote aus.
attribute, count, time oder size
assertions, outputMode, return, inputPort, timeUnit
Der Ausgabemodus SIMPLE ist zwar möglich, macht aber in diesem Kontext normalerweise keinen Sinn.
PATTERN({type = 'RELATIVE_N_LOWEST', eventTypes = ['bid'], assertions = ['price > 80'], attribute = 'price', count = 3, time = 10, timeUnit = 'SECONDS', outputmode = 'TUPLE_CONTAINER'}, bid) |
Wenn innerhalb dem festen Intervall von drei Sekunden alle Gebote größer als 140 sind, werden diese von dem Pattern ausgegeben.
time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'ALWAYS', eventTypes = ['bid'], time = 3, timeUnit = 'SECONDS', assertions = ['bid.price > 140'], outputMode = 'INPUT'}, bid) |
Das Pattern ist erfüllt, wenn innerhalb dem festen Intervall von zehn Sekunden mindestens ein Gebot größer als 280 ist.
time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'SOMETIMES', eventTypes = ['bid'], time = 10, timeUnit = 'SECONDS', assertions = ['bid.price > 280']}, bid) |
Die Anfrage wählt Attribute von Personen und den Geboten der jeweiligen Personen aus, bei denen die Person vor den Gebot auftritt und sein Gebot größer als 200 ist.
Die Anfrage basiert auf dem SASE-Operator. Der Parameter query erwartet eine Anfrage, die in der SASE-Anfragesprache formuliert ist. Vgl. SASE
SASE({query = 'PATTERN SEQ(person p, bid b) WHERE skip_till_next_match(p,b) {p.id = b.bidder, b.price > 200} RETURN p.id, p.name, b.price', schema=[['id','Integer'],'name','String'], type='PersonEvent1'} , person, bid) |
Die Anfrage wählt alle zehn Sekunden die ersten drei Gebote aus, die größer als 100 sind und gibt die angegebenen Attribute aus.
count, time oder size
assertions, outputMode, return, inputPort, timeUnit
Der Ausgabemodus SIMPLE ist zwar möglich, macht aber in diesem Kontext normalerweise keinen Sinn.
PATTERN({type = 'FIRST_N', eventTypes = ['bid'], time = 10, timeUnit = 'SECONDS', count = 3, assertions = ['bid.price > 100'], outputmode = 'EXPRESSIONS', return = ['bid.timestamp', 'bid.bidder', 'bid.price']}, bid) |
Die Anfrage wählt alle zehn Sekunden die letzten drei relevanten Events aus. Dies können Gebote und Auktionen sein.
count, time oder size
assertions, outputMode, return, inputPort, timeUnit
Der Ausgabemodus SIMPLE ist zwar möglich, macht aber in diesem Kontext normalerweise keinen Sinn. Beinhaltet die Ausgabe verschiedene Event-Typen macht der Ausgabemodus TUPLE_CONTAINER Sinn, da bei dort das Schema der Daten keine Rolle spielt. Bei anderen Ausgabemodi entstehen unter Umständen null-Werte oder ähnliches.
PATTERN({type = 'LAST_N', eventTypes = ['person', 'auction'], time = 10, timeUnit = 'SECONDS', count = 3, outputmode = 'TUPLE_CONTAINER'}, auction, person) |
Das Pattern ist erfüllt, wenn die Werte der Gebote innerhalb des festen Zeitintervalls von 2 Sekunden streng monoton steigen.
attribute, time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'INCREASING', eventTypes = ['bid'], attribute = 'price', time = 2, timeUnit = 'SECONDS'}, bid) |
Das Pattern ist erfüllt, wenn die Werte der Gebote innerhalb des festen Zeitintervalls von 2 Sekunden streng monoton fallen.
attribute, time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'DECREASING', eventTypes = ['bid'], attribute = 'price', time = 2, timeUnit = 'SECONDS'}, bid) |
Das Pattern ist erfüllt, wenn sich die Werte der Gebote innerhalb des festen Zeitintervalls von 2 Sekunden nicht ändern.
attribute, time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'STABLE', eventTypes = ['bid'], attribute = 'price', time = 2, timeUnit = 'SECONDS'}, bid) |
Das Pattern ist erfüllt, wenn die Werte der Gebote innerhalb des festen Zeitintervalls von 2 Sekunden monoton fallen.
attribute, time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'NON_INCREASING', eventTypes = ['bid'], attribute = 'price', time = 2, timeUnit = 'SECONDS'}, bid) |
Das Pattern ist erfüllt, wenn die Werte der Gebote innerhalb des festen Zeitintervalls von 2 Sekunden monoton steigen.
attribute, time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'NON_DECREASING', eventTypes = ['bid'], attribute = 'price', time = 2, timeUnit = 'SECONDS'}, bid) |
Das Pattern ist das Gegenstück zum Stable-Pattern. Es ist erfüllt, wenn sich die Werte von drei aufeinanderfolgenden Gebote ändern.
attribute, time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'NON_STABLE', eventTypes = ['bid'], attribute = 'price', size = 3}, bid) |
Das Pattern ist erfüllt, wenn die Werte der Gebote innerhalb des festen Zeitintervalls von 2 Sekunden mindestens einmal streng monoton steigen und mindestens einmal streng monoton fallen.
attribute, time oder size
assertions, outputMode, return, inputPort, timeUnit
Ist der Ausgabemodus nicht SIMPLE, werden bei der Erfüllung des Patterns alle relevanten Events ausgegeben, die die Assertions erfüllen.
PATTERN({type = 'MIXED', eventTypes = ['bid'], attribute = 'price', time = 2, timeUnit = 'SECONDS'}, bid) |