This generic operator allows the definition of different kinds of pattern (e.g. all, any). For sequence based patterns see SASE operator. In the following the implemented pattern types are described.
type
: The type of pattern that should be detected. See below for a list of all supported types and examples.eventTypes
: Describes the types of the input portstime
: If there should be a temporal context (window) this states the time interval size.timeUnit
: If there should be a temporal context, this states the time unit.size
: 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
/INPUTThe ALL type selects all events that match a given pattern.
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) |
In the example, the query selects a bid, with a value higher than 200, and the person who won the bid, the ID and name of the person and the price of the bid. Be taken into account only persons and commandments, which are not older than 10 min. In summary, one could say that the request selects the persons within 10 min after its release already bid with a value over 200 exits. The time and size parameter determine how long and how many events are cached.
The ANY type selects one event that matches the given pattern.
PATTERN({type = 'ANY', eventTypes = ['bid'], assertions = ['bid.price > 220'], outputMode = 'INPUT'}, bid) |
In the example, the query selects the request of each bid with a value higher than 200 from. The i-th assertion applies only to events of the type that is the i-th position of the relevant Event Type list.
The ABSENCE type detects the absence of a particular event in the stream.
PATTERN({type = 'ABSENCE', eventTypes = ['bid'], outputMode = 'SIMPLE', time = 400}, bid) |
In the example, the query recognizes the request if 400 milliseconds was no bid. Success and accuracy depends on the heartbeats. As output mode only SIMPLE is possible.
The COUNT type triggers as soon as the given number of events are detected.
PATTERN({type = 'FUNCTOR', eventTypes = ['aggr'], assertions = ['count_price > 20']}, AGGREGATE({aggregations = [['COUNT', 'price', 'count_price', 'double']]}, bid)) |
The request is fulfilled once more than 20 bids were submitted. Any currently based on the pattern, the aggregation gets as input from the outside.
The VALUE-MAX type triggers as soon as the given value is exceeded.
PATTERN({type = 'FUNCTOR', eventTypes = ['bid'], assertions = ['max_price > 300']}, AGGREGATE({aggregations=[['MAX', 'price', 'max_price', 'double']]}, bid)) |
The request is fulfilled as soon as the maximum value of the bid exceeds 300. Any currently based on the pattern, the aggregation gets as input from the outside.
The VALUE-MIN type triggers as soon as the minimum value fall below the given threshold.
PATTERN({type = 'FUNCTOR', eventTypes = ['bid'], assertions = ['min_price > 50 && min_price < 100']}, AGGREGATE({aggregations=[['MIN', 'price', 'min_price', 'double']]}, bid)) |
The request is fulfilled as long as the minimum value of a bid is greater than 50 and less than 100. Any currently based on the pattern, the aggregation gets as input from the outside.
The VALUE-AVERAGE type triggers as soon as th earithmetic mean fall below the given threshold.
PATTERN({type = 'FUNCTOR', eventTypes = ['bid'], assertions = ['avg_price < 140']}, AGGREGATE({aggregations=[['AVG', 'price', 'avg_price', 'double']]}, bid)) |
The request is fulfilled if the arithmetic mean of a bid is less than 140. Any currently based on the pattern, the aggregation gets as input from the outside.
The RELATIVE-N-HIGHEST type selects the N highest matching events.
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) |
The query selects every six seconds from the three highest bids. The output mode SIMPLE is possible, but does not make much sense.
The RELATIVE-N-LOWEST type selects the N lowest matching events.
PATTERN({type = 'RELATIVE_N_LOWEST', eventTypes = ['bid'], assertions = ['price > 80'], attribute = 'price', count = 3, time = 10, timeUnit = 'SECONDS', outputmode = 'TUPLE_CONTAINER'}, bid) |
The query selects every six seconds from the commandments which are higher than 80, the three lowest bids. The output mode SIMPLE is possible, but in this context usually makes no sense.
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) |