The present application relates to processing of data streams and more particularly to techniques for detecting patterns in data or event streams.
Databases have traditionally been used in applications that require storage of data and querying capability on the stored data. Existing databases are thus best equipped to run queries over finite stored data sets. However, the traditional database model is not well suited for a growing number of modern applications in which data is received as a stream of data events instead of a bounded data set. A data stream, also referred to as an event stream, is characterized by a real-time, potentially continuous, sequence of events. A data or event stream thus represents unbounded sets of data. Examples of sources that generate data streams include sensors and probes (e.g., RFID sensors, temperature sensors, etc.) configured to send a sequence of sensor readings, financial tickers, network monitoring and traffic management applications sending network status updates, click stream analysis tools, and others.
Pattern matching is commonly used for analyzing data. For example, data stored in a database may be analyzed to determine if the data matches a pattern. It is desirable to efficiently perform pattern matching on data received in the form of data or event streams.
Embodiments of the present invention provide techniques for detecting patterns in one or more data streams. A pattern to be detected may be specified using a regular expression. Events received in a data stream are processed during runtime to detect occurrences of the specified pattern in the data stream. In one embodiment, a pattern type or class is determined for the specified pattern and pattern matching is performed using a technique selected based upon the type or class determined for the specified pattern.
In one embodiment, the pattern specified using a regular expression comprises one or more symbols, with each symbol being associated with a predicate or condition. During pattern matching over a data stream, a symbol of the regular expression is considered to be matched by an input event received in the data stream if the predicate associated with the symbol is matched or satisfied by the received event. In one embodiment, one or more bindings are stored after processing each received event to store the state of partial or full matches as a result of processing the event. These bindings enable pattern matching to be performed without performing backtracking of the input events.
According to an embodiment of the present invention, techniques are provided for detecting a pattern in a data stream comprising a sequence of events. Predicate information is received by a processing system specifying a predicate associated with each symbol in a set of one or more symbols. A regular expression may be received specifying a pattern, the regular expression comprising one or more symbols from the set of symbols. A pattern type is then determined based upon the regular expression and the predicate information. A technique (first technique) is then determined from a plurality of techniques based upon the pattern type and used for detecting the pattern in the data stream. Using the first technique may comprise constructing an automaton for the regular expression.
The first technique may be used to process events received in a data stream. A plurality of events in the data stream may be received, the plurality of events received in sequence. Using the first technique may comprise detecting presence of the pattern in the data stream using the automaton.
In one embodiment, detecting the pattern in the data stream involves processing each event in the data stream in the sequence the event is received, the detecting being performed without having to re-process previously received events.
In one embodiment. the predicate information and the regular expression may be specified in a SQL query. In this embodiment, the processing may comprise extracting the regular expression from a PATTERN component in the SQL query, and extracting the predicate information from a DEFINE component in the SQL query.
In one embodiment, determining the pattern type may comprise determining, for each symbol in the set of symbols, if the predicate for the symbol is dependent on another symbol in the set of symbols. In another embodiment, determining the pattern type may comprise determining, for each symbol in the regular expression, if a quantifier is associated with the symbol, then whether the quantifier is only one of a quantifier indicating zero or more occurrences of the symbol, a quantifier indicating one or more occurrences of the symbol, or a quantifier indicating zero or more occurrences of the symbol. In yet another embodiment, determining the pattern type may comprise determining if an alternation operator, a grouping operator, or an aggregation operator over the same symbol are specified in the regular expression. In yet another embodiment, determining the pattern type may comprise determining whether the symbols in the regular expression are linked only using a concatenation operator.
In one embodiment, using the first technique may comprise constructing an automaton for the regular expression, and in response to receiving an event in the data stream: determining one or more symbols from the set of symbols that are matched due to the received event, wherein a symbol is matched if the predicate associated with the symbol is satisfied due to the received event; determining, based upon the one or more symbols that are determined to be matched due to the received event and based upon a first set of states stored prior to receiving the received event, a second set of states, each state in the second set of states indicating a degree to which the pattern is matched due to the receive event; and determining if the pattern is matched based upon the second set of states.
The foregoing, together with other features and embodiments will become more apparent when referring to the following specification, claims, and accompanying drawings.
In the following description, for the purposes of explanation, specific details are set forth in order to provide a thorough understanding of embodiments of the invention. However, it will be apparent that the invention may be practiced without these specific details.
Embodiments of the present invention provide techniques for detecting patterns in data or event streams. A pattern to be detected may be specified using a regular expression. Events received in data streams are processed during runtime to detect occurrences of the pattern specified by the regular expression in the data stream.
A data or event stream is a real-time sequence of events. Multiple events may be received in a stream. The data stream can thus be considered as a stream of unbounded sets of data. In one embodiment, a data stream is a sequence of <tuple, timestamp> pairs. The tuple refers to the data portion of a stream. A tuple may be considered as similar to a row in a table. The tuples in a stream have a schema. A stream can include multiple tuples. Timestamps define an order over the tuples in a data stream. The timestamps in a data stream may reflect an application's notion of time. For example, the timestamp may be set by an application on the system receiving an event stream. The receiving system may timestamp an event on receipt as configured by the application, for example, if specified in the CREATE STREAM DDL that is used to define a structure of the events stream and the mechanism used to use application time or system time as the timestamp. In other embodiments, the timestamp associated with a tuple may correspond to the time of the application sending the data events. The timestamp is part of the schema of a stream. There could be one or multiple tuples with the same timestamp in a stream. The tuples in a stream can be viewed as a series of events and accordingly the data stream is also referred to as an event stream. An event stream can thus be considered to comprise a series of events, each with an associated timestamp. For example, an event stream may comprise a series of temperature readings from a sensor such as 10°, 15°, 20°, etc. and associated time stamps. For purposes of this application, the terms “tuple” and “event” are being used interchangeably.
System 100 comprises an event processing server 102 that is configured to process event streams. Event processing server 102 may receive one or more event streams. As shown in
In the embodiment depicted in
In one embodiment, patterns to be matched are specified using regular expressions. A regular expression is a string of symbols (also referred to as correlation names or correlation variables) representing the pattern to be matched. The regular expression is built using one or more symbols and may use one or more operators. Examples of operators include but are not limited to a concatenation operator (e.g., an “AND” operator between symbols in a regular expression may be used to indicate an AND relationship between the symbols), alternation operator (e.g., a vertical bar ‘|’ may separate symbols in a regular expression indicating an OR condition for the symbols), one or more quantifiers, grouping operator (e.g., indicated by parentheses), and the like. Examples of quantifiers include an asterisk ‘*’ implying zero or more occurrences of the symbol with which the quantifier is associated, a plus sign ‘+’ implying one or more occurrences of the symbol with which the quantifier is associated, a question mark ‘?’ implying zero or one occurrences of the symbol with which the quantifier is associated, reluctant quantifiers, and the like. Examples of operators and quantifiers that may be used, including associated syntax for the regular expressions, are provided and described in Fred Zemke et al., “Pattern Matching in Sequence of Rows (12),” ISO/IEC JTCi/SC32 WG3:URC-nnn, ANSI NCITS H2-2006-nnn, Jul. 31, 2007, the entire contents of which are herein incorporated by reference for all purposes.
In the past, regular expressions have been mainly used to find patterns in strings. In embodiments of the present invention, the power of regular expressions is used to match patterns in event streams received by event processing server 102. Regular expressions provide a simple, concise, and flexible way for specifying patterns to be matched. In the embodiment depicted in
Pattern information 118 may be provided using different languages. In one embodiment, a programming language such as SQL, which is commonly used to query databases, may be used. Extensions may be provided to SQL to express the pattern to be matched for event streams. For example, pattern information 118 may specify a SQL query comprising a regular expression specifying a pattern to be matched in one or more event streams received by event processing server 102.
Oracle supports a CQL (Continuous Query Language) language in Complex Events Processing (CEP) products. CQL is very similar to SQL with extensions for stream processing. Pattern matching constructs proposed to extend SQL to specify pattern matching via regular expressions (e.g., the constructs described in Fred Zemke et al., “Pattern Matching in Sequence of Rows (12),” ISO/IEC JTCi/SC32 WG3:URC-nnn, ANSI NCITS H2-2006-nnn, Jul. 31, 2007, the entire contents of which are herein incorporated by reference for all purposes) have been adopted in CQL to extend CQL for the purpose of specifying pattern matching requirements over event streams.
Typically, pattern matching for a query pattern occurs only over a single input stream. Pattern matching may also be performed over multiple event streams, for example, using CQL. In one embodiment, this may be done by first performing a UNION of all the relevant input streams over which pattern matching is to be done with the result defining a view corresponding to an intermediate stream, and the pattern to be matched can be specified over this single intermediate stream. The pattern will then be matched to all the streams included in the view.
Query 200 comprises a PATTERN component 203 that specifies a regular expression 204 identifying the pattern to be recognized in the event stream “Ticker”. The regular expression (A B C A B D) in query 200 comprises several symbols or correlation names. The pattern specified in
The DEFINE component 206 of query 200 specifies Boolean conditions (or predicates) that define the symbols declared in the regular pattern. For the example depicted in
It should be understood that all symbols defined in regular expression do not require an associated predicate. A symbol with no associated predicate is by default assumed to be always matched or true. Such a symbol may be used to match any event in an event stream.
The predicates depicted above are all related to the price attribute of an event. An event may have one or more attributes. The predicates may be based upon these attributes. A particular symbol is deemed to be matched by an input event received in an event stream if the predicate associated with the symbol is matched or satisfied due to the input event. For example, symbol A in
For the symbols and associated predicates depicted in
As evident from the above, matching of symbols in a regular expression to events received in an event stream is quite different from conventional pattern matching in strings using regular expressions. In event stream pattern matching, a symbol in a regular expression is considered matched by a received event only if the predicate associated with the symbol is satisfied by the event. This is unlike character string matching using regular expressions wherein a symbol is matched if that symbol itself is present in the string to be matched. Further, in event stream pattern matching, multiple predicates can be satisfied at the same time and as a result multiple symbols may be matched by a received input event. This is not the case in regular string matching. Several other differences exist between pattern matching in strings and pattern matching in event streams.
For the pattern specified in
As indicated above, a pattern may be specified using a query, such as a CQL query depicted in
As described above, SQL extensions are provided for specifying a query for performing pattern matching over event streams. The query may comprise a regular expression identifying the pattern to be matched and predicates defining or associated with symbols in the regular expression. The extensions enhance the ability to use SQL for performing pattern matching on event streams.
Referring back to
In one embodiment, class-technique determinator uses pattern type information 120 identifying to determine the pattern class or type for the information provided in 118. Pattern type information 120 may identify different pattern types or classes and characteristics associated with the different pattern classes. Pattern matching module 110 may use pattern type information 120 to automatically identify a particular type or class of pattern for the pattern specified in pattern information 118 from among multiple pattern classes that module 110 is capable of processing. In another embodiment, pattern type information 120 is not needed, and pattern matching module 110 may be configured to automatically determine a type of pattern by analyzing the information provided in pattern information 118.
In one embodiment, pattern matching module 110 is configured to apply different pattern matching techniques for different types or classes of patterns. After a pattern type has been determined for the pattern specified in pattern information 118, module 113 is configured to determine a particular pattern matching technique, from among multiple available techniques, that is suited for performing pattern matching for the determined pattern. In this manner, a customized pattern matching technique or a technique that is best suited for performing pattern matching for the determined pattern type is determined. This helps to improve the efficiency of the pattern matching process for specific types of patterns.
In one embodiment, class-to-technique information 124 may be provided to pattern matching module 110 identifying one or more pattern classes and one or more pattern matching techniques to be used for detecting pattern matches for each pattern class. After a class of pattern specified in pattern information 118 has been determined, pattern matching module 110 may use class-to-technique information 124 to determine a specific pattern matching technique to be used for finding matches in the event stream. For example, if the pattern is determined to be a Class A pattern, then a pattern matching technique appropriate for a Class A pattern may be used for performing the pattern matching. Whereas, if the pattern is determined to be a Class B pattern, then a pattern matching technique appropriate for a Class B pattern may be used for performing the pattern matching.
In one embodiment, the pattern matching process comprises constructing a finite state automaton (FSA) for a given pattern and then using the constructed FSA to guide the pattern matching process during runtime as events are received. Automaton generator 114 is configured to parse the input regular expression received via interface 112 and build an automaton for the pattern to be matched. One or more automata constructed by generator 114 may be stored as automata information 122. The automaton generated for a pattern is then used in runtime by matcher 116 to guide detection of the pattern in event streams 104, 106, and 108.
As previously indicated, the pattern matching process may be customized for certain classes of patterns. In one embodiment, automaton generator 114 may receive information from class-technique module 113 identifying the class of the pattern and the technique to be used for performing the pattern matching for the identified class of pattern. Automaton generator 114 may then generate an automaton using the selected pattern matching technique.
Matcher 116 is configured to process the events received in the events streams during runtime to detect occurrences of the specified pattern in the incoming event streams. Matcher 116 uses the automaton generated by automaton generator 114 to guide the pattern matching process. For each event stream, the automaton is used as a guide to indicate how much of the specified pattern is matched by the events received in the event stream at any point in time. In one embodiment, bindings are maintained by matcher 116 after each event in an event stream is processed to capture the state of partial or full matches of the pattern at any point in time. A binding is like an assignment of contiguous events (and in the case of PARTITIONS, contiguous within the PARTITION) to one or more correlation names that corresponds to a partial (or possibly full) match that satisfies all the DEFINE predicates associated with the pattern. A binding indicates that degree to which a pattern is matched as a result of the last received event. Bindings stored after receiving an event may indicate partial matches that have the potential of becoming longer matches or full matches. If a particular pattern matching technique has been selected, matcher 116 may perform the processing according to the selected technique.
Matcher 116 may be configured to take one or more actions when a particular pattern is matched or detected in an event stream. For example, when a pattern is matched, matcher 116 may send a signal indicating that the pattern has been matched. The signal may be forwarded to one or more components of events processing server 102 or some other system for further processing. In one embodiment, the action may include outputting the events that resulted in the pattern being matched.
System 100 depicted in
As depicted in
An automaton is then constructed for the pattern received in 302 (step 304). The automaton generated in 304 may be a finite state automaton (FSA).
The automaton constructed in 304 is then used during runtime to guide the pattern matching process to detect presence of the specified pattern in the specified event streams (step 306). As part of the processing, the event streams to be analyzed are passed through a state machine corresponding to the automaton generated in 304. As part of the processing in 306, bindings are maintained after each event received in an event stream has been analyzed to store the state of pattern matches, including partial matches that have the potential to turn into full matches, after processing the received event. As previously described, a binding is used to encapsulate a full or partial pattern match and maintains references to the received events of the stream that comprise the full or partial matched pattern.
One or more actions may be performed upon detecting a pattern match in an input event stream being analyzed (step 308). The actions performed may include sending a signal indicating a match, outputting the events in the event stream that resulted in the pattern match, and other actions.
Steps 302 and 304 typically represent design time or compile time activities that are performed before the pattern matching analysis may be performed. Steps 306 and 308 represent runtime activities that are performed in real time as events in an event stream are received and processed.
As indicated above, in one embodiment of the present invention, the type or class of the pattern to be matched is determined and then used to customize the pattern matching processing.
As depicted in
Processing is then performed to determine a type or class of pattern for the pattern received in 402 (step 404). In one embodiment, the class of pattern may be determined based upon the regular expression received in 402 and/or the predicates defined for the symbols in the regular expression. For example, the type or class of pattern may be determined based upon the contents of the PATTERN and DEFINE clauses. Accordingly, in one embodiment, as part of the processing performed in 404, the information received in 402 is parsed to determine the contents of the PATTERN and DEFINE clauses. A type or class is then determined based upon analysis of the extracted contents.
In one embodiment, preconfigured information identifying different types of patterns and their associated characteristics may be used to facilitate the pattern type identification in 404. For example, as depicted in
A technique to be used for performing the pattern matching processing is then determined based upon the pattern class or type determined in 404 (step 406). In one embodiment, preconfigured information identifying different types of patterns and techniques to be used for each class may be used to facilitate identification of the technique in 406. For example, as depicted in
Pattern matching processing is then performed by applying the technique determined in 406 (step 408). The processing performed in 408 may include constructing an an automaton for the pattern received in 402. The automaton generation may be performed according to the technique determined in 406. Accordingly, the automaton generated in 408 may be customized for the particular class or type determined in 404.
Further, as part of the processing performed in 408, the automaton that is constructed may then be used during runtime to guide the pattern matching process to detect presence of the specified pattern in a specified event stream. The pattern detection may be performed per the technique determined in 406. In this manner, a pattern matching technique that is customized for or well suited for the type or class determined in 404 is used in 408.
As part of the processing performed in 408, the events received in an event stream are processed and passed through a state machine corresponding to the automaton generated in 408. As part of the processing in 408, bindings are maintained after each received event to represent the state of pattern matches including partial matches that have the potential to turn into full matches.
One or more actions may be performed upon detecting a full pattern match in the input event stream (step 410). The actions performed may include sending a signal indicating a match, outputting event instances that resulted in the full pattern match, and other actions.
Steps 402, 404, and 406 represent design time or compile time activities that are performed before the runtime pattern matching may be performed. Steps 408 and 410 represent runtime activities that are performed in real time as events in an event stream are received and processed.
As described above, an automaton such as a finite state automaton (FSA) is generated for a pattern to be matched prior to runtime processing. For example, an automaton is generated for the pattern corresponding to the regular expression (A B C A B D) depicted in
Table A (shown below) depicts a state transition function table created for the FSA generated for the pattern identified in
In Table A, the first column shows an initial state. The third column of the table identifies a state to which a transition is made from the initial state upon receiving an event that matches the symbols identified in the second column of the table. For example, as shown by the first two rows of Table A, the FSA starts in state Q0. If an event received in the event stream causes the first symbol A in the pattern to be matched, then the FSA transitions from state Q0 to state Q1. However, if any other symbol (e.g., B, C, D, or R) is matched by the received event, then the FSA continues to be in state Q0. Likewise, when in state Q1, if the next event causes symbol B to be matched, then the FSA transitions to state Q2 and if the event matches a A, C, D, or R, then the state reverts to state Q0. In this manner, Table A specifies the automaton for the pattern identified by regular expression (A B C A B D).
The general idea for the FSA is to have one state per prefix of the pattern to be matched. There is a forward transition from a state Qi only corresponding to the matching of the symbol that when concatenated with the prefix associated with state Qi produces the prefix associated with the state Qi+1. For all other symbols the transition is to state Q0. For example consider state Q5. The prefix corresponding to this state is ABCAB. If the next event in the event stream matches the symbol D, the FSA machine will transition to state Q6 since the prefix associated with state is ABCABD which is the concatenation of ABCAB (the prefix associated with state Q5) and the matched symbol D. On the other hand, if the next event in the event stream matches the symbol C, the FSA state machine will transition to state Q0.
The FSA generated for the pattern identified by (A B C A B D) is then used at runtime to guide the detection of the specified pattern in an event stream. For purposes of illustrating how the FSA of Table A may be applied to an event stream, it is assumed that the event stream comprises events as shown below in Table B and are received in the sequence depicted in Table B. The event stream may be for example a ticker event stream comprising the price of a stock.
35
34
32
32
31
45
A
A
D
B
B
C
As shown in Table B, events are received in sequence (as determined by the time stamp associated with each event) and have price attributes: 36, 35, 35, 34, 32, 32, 31, 45. The third row in Table B depicts, for each sequence time point, the symbols of the pattern that are matched by the price attribute of the event received at that time point. For example, at sequence #0, an event is received having a price attribute of 36 that results in symbol A being matched since 30<=36<=40, satisfying the predicate associated with symbol A. Price 35 received at sequence #1 causes the following matches: A (since 30<=35<=40), B (since 35<36 (the previous price)), and C (since 35<=36 (the previous price)). Likewise, price 35 received at seq #2 results in the following matches: A (since 30<=35<=40) and C (since 35<=35). Price 34 received at seq #3 results in the following matches: A (since 30<=34<=40), B (since 34<35) and C (since 34<=35). Price 32 received at seq #4 results in the following matches: A (since 30<=32<=40), B (since 32<34), and C (since 32<=35). Price 32 received at seq #5 results in the following matches: A (since 30<=32<=40) and C (since 32<=32). Price 31 received at seq #6 results in the following matches: A (since 30<=31<=40), B (since 31<32), and C (since 31<=32). Price 45 received at seq #7 results in the following matches: only D (since 45>31).
Table C shows the state of the FSA (of Table A) after receipt of each event in the event stream according to the sequence indicated in Table B.
35
A
34
B
32
C
32
A
31
B
45
D
The first column of Table C “Seq #” identifies the sequence number indicating the sequence time point at which an event is received. The second column “Price” indicates, for each sequence, the value of the price attribute of the event received in the event stream in that sequence point. The third column “Matched Symbol” identifies, for each event, the symbol or correlation name(s) that is matched by the event received at the sequence. Zero or more symbols may be matched by an event. The fourth column “State of FSA” identifies, for each sequence, the different states in which the FSA may be in after processing the event received in that sequence. The fifth column “Stored Bindings”, for each sequence time point, indicates the bindings that are stored for a sequence time point after processing an event received at that sequence time point. Each binding identifies a partial or full match of the pattern to be matched. In Table C, each binding identifies a state representing a partial or full match after processing an event. Each binding also identifies the events that cause the binding to be in that state. For example, a binding Q2: (2,3,*,*,*,*) represents a partial match (of the first two symbols) of the pattern being matched and corresponds to the FSA being in state Q2 due to prices associated with events received in seq #2 and seq #3. As another example, a binding Q3: (3,4,5,*,*,*) indicates that the binding corresponds to the FSA being in state Q3 due to a partial match due to prices associated with events received in sequences #3, #4, and #5. A Q0: (*,*,*,*,*,*) indicates a binding corresponding to the Q0 state, which is the starting state, and represents no match of the pattern being matched.
Bindings stored after processing an event encapsulate partial or full matches. A binding indicates that degree to which a pattern is matched as a result of the last received event. Bindings stored after receiving an event may indicate partial matches that have the potential of becoming longer matches or full matches. They contain the mapping information between a symbol and the event from the stream. At any point in time, for the pattern identified by regular expression depicted in
The processing depicted in Table C may be described as follows:
(1) The FSA starts in state Q0.
(2) At seq #0, an event is received with price 36. This results in a match with symbol A and causes the FSA to be in two possible states Q0 and Q1. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no partial pattern match. The binding corresponding to this state is Q1: (*,*,*,*,*,*) indicating that the binding represents a partial pattern match (“A”) due to the event received in seq #0.
(3) At seq #1, an event is received with price 35. This results in a match with symbols A, B, and C and causes the FSA to be in three possible states Q0, Q1, and Q2. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no partial pattern match. The binding corresponding to state Q1 is Q1: (*,*,*,*,*,*) indicating that the binding represents a partial pattern match (“A”) due to the event received in seq #1. The binding corresponding to state Q2 is Q2: (0,1,*,*,*,*) indicating that the binding represents a partial pattern match (“AB”) due to the events received in seq #0 and seq #1.
(4) At seq #2, an event is received with price 35. This results in a match with symbols A and C and causes the FSA to be in three possible states Q0, Q1, and Q3. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no pattern match. The binding corresponding to state Q1 is Q1: (2,*,*,*,*,*) indicating that the binding represents a partial pattern match (“A”) due to the event received in seq #2. The binding corresponding to state Q3 is Q3: (0,1,2,*,*,*) indicating that the binding represents a partial pattern match (“ABC”) due to the events received in seq #0, seq #1, and seq #2.
(5) At seq #3, an event is received with price 34. This results in a match with symbols A, B, and C and causes the FSA to be in four possible states Q0, Q1, Q2, and Q4. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no pattern match. The binding corresponding to state Q1 is Q1: (3,*,*,*,*,*) indicating that the binding represents a partial pattern match (“A”) due to the event received in seq #3. The binding corresponding to state Q2 is Q2: (2,3,*,*,*,*) indicating that the binding represents a partial pattern match (“AB”) due to the events received in seq #2 and seq #3. The binding corresponding to state Q4 is Q4: (0,1,2,3,*,*) indicating that the binding represents a partial pattern match (“ABCA”) due to the events received in seq #0, seq #1, seq #2, and seq #3.
(6) At seq #4, an event is received with price 32. This results in a match with symbols A, B, and C and causes the FSA to be in five possible states Q0, Q1, Q2, Q3, and Q5. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no pattern match. The binding corresponding to state Q1 is Q1: (4,*,*,*,*,*) indicating that the binding represents a partial pattern match (“A”) due to the event received in seq #4. The binding corresponding to state Q2 is Q2: (3,4,*,*,*,*) indicating that the binding represents a partial pattern match (“AB”) due to the events received in seq #3 and seq #4. The binding corresponding to state Q3 is Q3: (2,3,4,*,*,*) indicating that the binding represents a partial pattern match (“ABC”) due to the events received in seq #2, seq #3, and seq #4. The binding corresponding to state Q5 is Q5: (0,1,2,3,4,*) indicating that the binding represents a partial pattern match (“ABCAB”) due to the events received in seq #0, seq #1, seq #2, seq #3, and seq #4. It should be noted here that binding Q5 is just one match from a complete pattern match.
(7) At seq #5, an event is received with price 32. This results in a match with symbols A and C and causes the FSA to be in four possible states Q0, Q1, Q3, and Q4. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no pattern match. The binding corresponding to state Q1 is Q1: (5,*,*,*,*,*) indicating that the binding represents a partial pattern match (“A”) due to the event received in seq #5. The binding corresponding to state Q3 is Q3: (3,4,5,*,*,*) indicating that the binding represents a partial pattern match (“ABC”) due to the events received in seq #3, seq #4, and seq #5. The binding corresponding to state Q4 is Q4: (2,3,4,5,*,*) indicating that the binding represents a partial pattern match (ABCA”) due to the events received in seq #2, seq #3, seq #4, and seq #5.
(8) At seq #6, an event is received with price 31. This results in a match with symbols A, B, and C and causes the FSA to be in five possible states Q0, Q1, Q2, Q4, and Q5. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no pattern match. The binding corresponding to state Q1 is Q1: (6,*,*,*,*,*) indicating that the binding represents a partial pattern match (“A”) due to the event received in seq #6. The binding corresponding to state Q2 is Q2: (5,6,*,*,*,*) indicating that the binding represents a partial pattern match (“AB”) due to the events received in seq #5 and seq #6. The binding corresponding to state Q4 is Q4: (3,4,5,6,*,*) indicating that the binding represents a partial pattern match (“ABCA”) due to the events received in seq #3, seq #4, seq #5, and seq #6. The binding corresponding to state Q5 is Q5: (2,3,4,5,6,*) indicating that the binding represents a partial pattern match (“ABCAB”) due to the events received in seq #2, seq #3, seq #4, seq #5, and seq #6.
At seq #7, an event is received with price 45. This results in a match with symbol D and causes the FSA to be in two possible states Q0 and Q6. The binding corresponding to state Q0 is Q0: (*,*,*,*,*,*) indicating that the binding represents no partial pattern match. The binding corresponding to state Q6 is Q6: (2,3,4,5,6,7) indicating that the binding represents a full pattern match (“ABCABD”) due to the event received in seq #2, seq #3, seq #4, seq #5, seq #6 and seq #7.
State Q6, that is reached after the event in seq #7, represents that final state of the FSA representing a full pattern match. In the above example, the full pattern is matched due to events received in sequences 2, 3, 4, 5, 6, and 7. The events received at these sequence are italicized in Table B and in Table C and their corresponding states that resulted in a full match have been underlined. One or more actions may be initiated after the pattern match. The actions may include outputting the events that resulted in the final state. For the pattern indicated in
After a match is found, the resumption point of the pattern matching is determined based upon the AFTER MATCH SKIP TO clause (shown in
An interesting thing to note in the above example is the transitions that occur after processing the event at seq #5. After the event received at seq #4, the FSA is one event away from a full pattern match. However, the event received at seq #5 does not complete a full pattern match. However, binding Q3: (2,3,4,*,*,*) representing a partial match (“ABC”) after seq #4 is progressed to a Q4: (2,3,4,5,*,*) binding after seq #5 representing a partial match (“ABCA”).
As described above, pattern matching after receiving an event is performed based upon the received event and events received prior to the received event. The bindings that are stored after processing of an event enable the pattern matching to be performed without backtracking or re-scanning of the received events. In one embodiment, an event is processed upon its receipt by server 102. After an event is received and processed, the extent to which the pattern specified by the regular expression is matched based upon the most recently received event and one or more events received prior to the most recently received event is determined. The bindings stored after receipt and processing of an event encapsulate the extent of the matches. The bindings stored after the receipt of the last received event are then used to determine pattern matches after receipt of the next event. As a result of the use of bindings, the one or more events that have been received prior to the most recently received event do not have to be processed again for the pattern matching processing. In this manner, for purposes of pattern matching, an event is processed only once upon receipt of the event by server 102. After an event has been received and processed, the event does not have to be processed again as more events are received by server 102. The bindings after a sequence store the match information that is used for evaluating the DEFINE predicates and evaluating the MEASURES clause on obtaining a full match. In this manner, backtracking of events is not performed for the pattern matching according to an embodiment of the present invention.
As another example, consider the sequence of events depicted in Table D and the matched symbols:
34
25
25
31
25
45
A
B
C
A
B
D
Table E shows the state of the FSA (of Table A) after receipt of each event in an event stream according to the sequence indicated in Table D.
34
A
25
B
25
C
31
A
25
B
45
D
As depicted in Table E, the final state Q6 is reached due to events received at sequence numbers 3, 4, 5, 6, 7, and 8. The events resulting in a full match are italicized in the second column and the corresponding symbols that result in the match are underlined in the third column.
As indicated above, the technique used for performing pattern matching may be different for different types or classes of patterns. This section describes a pattern matching technique used for a specific simplified pattern referred to as a Class A pattern. The customized processing described in this section may be applied for detecting Class A patterns in one or more event streams.
In one embodiment, a Class A pattern is defined as follows:
Further, for a Class A pattern, the predicate defined for a symbol cannot be dependent on any other symbols. In other words, the predicate for a symbol has to be independent of other symbols. Accordingly, a predicate defined for a symbol in a Class A pattern does not include other symbols. For example, the predicate for a symbol A cannot have the following predicate (A.price<B.price) in which the predicate for A is dependent on symbol B. Also, aggregation operators (e.g., sum) over the same symbol are not permitted in the DEFINE clause for a Class A pattern. Further, for Class A patterns, only the regular expression concatenation operator is allowed to link the symbols in the regular expression, as shown above. Other, regular expression operators such as ALTERNATION (or |) and GROUPING are not permitted.
As described above, in order for a pattern specified in a query to be classified as a Class A pattern, the pattern and the predicates associated with symbols in the pattern have to satisfy certain restrictions described above. Accordingly, as part of determining a pattern type for a pattern specified in a query, pattern matching module 110 is configured to extract the regular expressions and predicates from the query and determine if the various characteristics (limitations) of a Class A pattern are satisfied. The pattern is classified as a Class A pattern only if the restrictions are satisfied. This processing may be performed, for example, in step 404 depicted in
Without loss of generality, it can be assumed that each Ci is distinct (although this is not a requirement for Class A patterns). It can be shown that the other cases, where the Ci's are not distinct, can be reduced to an instance of the case where the Ci's are distinct. This can be done by, for each repetition, replacing the repeated symbol with a new symbol defined using the same predicate.
The example query 500 depicted in
Pattern matching module 110 is configured to analyze query 500 as specifying a pattern that is a Class A pattern. Upon recognizing a pattern as a Class A pattern, pattern matching module 110 is configured to determine and apply a technique that is specified for Class A pattern processing. In one embodiment, according to the selected technique, a finite state automaton (FSA) is created for the pattern. The following definitions are introduced to formally describe the structure of the automaton.
Let Σ (alphabet)={Ci|1≦i≦m}
FOLLOW(m)={$} where $ is a special symbol
For 0≦i≦m−1,
The automaton corresponding to the pattern M(P)=(Q, Σ, δ, Q0, F) is defined as follows:
Q=Q0∪{Qi|1≦i≦m}.
Intuitively, there is one initial state and then one state per pattern symbol (or per correlation name since it is assumed without loss of generality that the symbols are distinct).
Σ is the alphabet given by Σ={Ci|1≦i≦m}
δ is the state transition function (defined in detail below)
Q0 is the initial state
F is the set of final states; F={Qi|QiεQ and FOLLOW(i) contains $}
The state transition function for a state Qi, for 0≦i≦m, is defined as follows:
Applying the above construction technique to the example depicted in
FOLLOW(3)={$}
FOLLOW(2)={C}
FOLLOW(1)={C, B}
FOLLOW(0)={A}
Table F depicts the state transition for the automaton constructed for the pattern specified in
The following observation follows directly from the construction above:
(1) If state QiεF, then for all j>i, QjεF
(2) If δ(Qi, Cj)!=Q0 for j>i, then δ(Qi+1, Cj) also !=Q0
The FSA constructed for the Class A pattern is then used during pattern matching to guide detection of the specified Class A pattern in event streams during runtime processing. Table G depicts an example of an input event stream for illustrating the processing that occurs at runtime for detecting a Class A pattern. As with previous examples, Table G indicates the sequence in which events are received in the event stream. For each event, the table shows the position of the event in the event stream, the price attribute of the event, and, for each sequence point, the symbols that are matched by the input event received at that sequence point. A symbol is considered matched by an event if the predicate associated with the symbol is satisfied by the event. As explained below, the underlined items in Table G constitute an instance of a full pattern match for pattern (AB*C).
A
B
B
C
During runtime, the FSA machine of Table F is used to detect the specified pattern in any one of several events based upon the prices associated with the input events. For a Class A pattern, multiple event matches may arise due to the non-determinism (since one event may match multiple correlation names) in the input events. For example, in the above example, upon receiving event e5, the FSA machine is (logically) looking for a pattern match in one of 18 event matches such as {AAAAA, AAABA, AAACA, ABAAA . . . }.
At every point in time (i.e., at any sequence number), after processing an input event ei,, the state of the automaton machine may be defined as follows:
S(i)={q|qεQ} with S(0)={Q0}
Now S(i+1) is given as follows:
S(i+1)=∪qεS(i) {δ(q, a) where aεC(i+1)} UNION Q0
Accordingly, for each state in S(i), the next state is found for each symbol that the input event can be bound to. S(i+1) represents the union of all these states. Maintaining S(i) is the way to simulate simultaneous detection of the pattern in any one of several matches. This may be implemented by maintaining S(i) at any point in the manner described above with the addition that Q0 is always in S(i).
Table H shown below illustrates application of the automaton depicted in Table F to the events received according to Table G.
As depicted in Table H, the event received at seq #1 (price=40) results in symbol A being matched and causes the FSA to be in states Q0 and Q1 (“A”). The event received at seq #2 (price=20) results in symbols A and B being matched and causes the FSA to be in states Q0, Q1 (“A”), and Q2 (“AB*”). The event received at seq #3 (price=10) results in symbols A, B, and C being matched and causes the FSA to be in states Q0, Q1 (“A”), Q2 (“AB*”), and Q3 (“AB*C”). Since Q3 is the final state (underlined in Table H), it indicates a full pattern match for pattern AB*C. Even though a full pattern match has been found, in one embodiment, the full pattern match is not output and pattern matching continues to find the longest pattern match. The event received at seq #4 (price=10) results in symbols A, B, B and C being matched and causes the FSA to be in states Q0, Q1, Q2, and Q3. Since Q3 is the final state, it again indicates a match for pattern AB*C. The event received at seq #5 (price=40) results in symbol A being matched and causes the FSA to be in states Q0, and Q1. At this point, there is no longer match possible and the matched pattern at seq #4 is output. In this manner, pattern matching on the input events is performed.
For a Class A pattern, preferment rules are used to determine which matches to store. For example, all matches may be stored or only the longest match may be stored. Rules that control such behavior are referred to as preferment rules. In one embodiment, preferment may be given to matches based upon the following priorities:
Bindings are maintained to facilitate the pattern matching without performing backtracking on the input events. A binding indicates that degree to which a pattern is matched as a result of the last received event. Bindings stored after receiving an event may indicate partial matches that have the potential of becoming longer matches or full matches. For simple non-recurring patterns, as specified in
As is evident from the above, a full match state for a Class A pattern may have multiple bindings associated with it. Preferment rules may be preconfigured for the pattern matching system for selecting a particular binding from the multiple bindings. For example, as depicted in
Since an FSA is a right-invariant equivalence relation over Σ* (that is if xRMy then xzRMyz for strings x,y and any string z), and the preferment rules used for the processing are prefix based, only one of these bindings needs to be maintained (for the SKIP PAST LAST ROW case). From the above, it follows that the number of active bindings stored at any point in time for a Class A pattern is bound by the number of states and is one plus the length of the specified pattern, i.e., one plus the number of symbol positions in the specified Class A pattern. For example, for the pattern AB*C, the maximum number of bindings maintained at any point is 3+1=4 bindings. Thus, in the default SKIP case (SKIP PAST LAST ROW) where the requirement is NOT to report overlapping matches, after processing every input event, there need be at most only one binding per state of the automaton.
For example, consider the previous example depicted in Table H where after the event received at seq #3 (referred as e3), there are two possible bindings that are associated with state Q2: (1) (A=2, B=3) and (2) (A=1, B=2, B=3). Now suppose “x” is the sequence of events corresponding to the first binding (i.e., x=(A=2, B=3)) and “y” is the sequence of events corresponding to the second binding (i.e., y=(A=1,B=2,B=3)), then for every following sequence of events “z”, both “xz” and “yz” will be in the same state of the automaton. This indicates right equivalence. The reason for this is due to the nature of a Class A pattern where predicates are independent of other symbols and hence the set of correlation names or symbols that an event can be bound to is independent of binding context.
Further, it can be shown that, whenever, “xz” is in final state, “yz” would be the match preferred over the match “xz” if and only if “y” is preferred over “x” per the preferment rules. Hence, it suffices to maintain the second binding (corresponding to “y”) and discard the first binding (corresponding to “x”) after processing input event e3, for state Q2.
For simple non-recurring patterns as specified in
Based on the above, in one embodiment, bindings may be classified into 3 categories:
Further, the following may be defined for bindings:
Based upon the above, it can be shown that in the case of Class A recurrent patterns as specified in
Accordingly, maintaining bindings during runtime processing essentially involves maintaining the vector (d, B) where d is the binding (if any) in the matched but unsure category and B is the set of partial match bindings. On processing ei,, let F1 denote the set of final states in S(i) and let B1 denote the set of bindings associated with the states in F1.
As depicted in
Table I shown below depicts the processing after receipt of each event according the automaton depicted in Table F.
In Table I, the first column shows the sequence in which events are received. The price attribute of each event is depicted in the second column. The third column shows the symbol matches after processing an event. The fourth column “State(S(i)” depicts the possible states of the finite automaton after processing each received event. The fifth column “Update Bindings” identifies the updated bindings corresponding to the states after processing an event. It should be noted that in the fifth column, a state may have multiple bindings associated with it. The sixth column “Apply Preferment” identifies bindings selected after applying preferment rules and/or deleting bindings as per steps 610 and 612 from
As indicated above, for Class A patterns, a state after processing an event can have multiple bindings associated with. After applying preferment rules, one or more of the bindings associated with a state may be deleted. In situations where you do not want overlapping matches (e.g., if the SKIP PAST LAST ROW clause is used), then some bindings may be deleted even if the deleted binding is a single binding for a state. For example, in Table I, after S3, it is known for sure that the first 3 events will participate in a full but unsure match, and since overlapping matches are not needed (SKIP PAST LAST ROW), there is no point in keeping A=3 in Q1 since it intersects with a previous match. Accordingly, after applying preferment rules, the binding A=3 in Q1 is deleted. In this manner, those bindings that can yield full matches that will be lower in preferment than an already determined full match can be deleted. If a state does not have any bindings associated with it, it is referred to as an inactive state and is also deleted. For example, in Table I, state Q1 is deleted after S3 and S4.
The following example illustrates how bindings are stored after receiving each event according to an embodiment of the present invention. For this example, let S(c1 integer) be an input event stream. A query Q may be received specifying a pattern to be detected in event stream S as follows:
In the above example, the (X.c1 % Y==0) predicates test whether X.c1 is divisible by Y. The pattern specified in the query is a Class A pattern. Table J shows a sequence of events received in event stream S and the matched symbols for the pattern (AB+CD*)
The FSA for the above query will have the following states:
Processing of the input events, per the flowchart depicted in
Sequence #1
Sequence #2
Sequence #3
Sequence #4
Sequence #5
Sequence #6
The processing is initiated upon receiving an event (step 702). Symbols, if any, that are matched due to the event received in 702 are determined (step 704). One or more states for the automaton are determined based upon the symbols determined to be matched in 704 and based upon bindings, if any, stored prior to receiving the event received in 702 (step 706). For example, the bindings stored upon receiving and processing the event received prior to the event received in 702 may be used to determine the state(s) of the automaton.
Updated bindings are then determined and maintained for the states determined in 706 (step 708). In one embodiment, the processing depicted in
In one embodiment, the processing depicted in
The technique described above is capable of detecting Class A patterns, including recurring and non-recurring patterns, in input event streams without performing any backtracking of the input events. Further, due to application of preferment rules, only one binding associated with a given state of the FSA is maintained at any point in time. As a result, the number of bindings to be maintained at any time point after processing an event is bounded by the number of states, which in turn is proportional to the length of the pattern to be matched. This enables pattern matching of Class A patterns to be performed efficiently in polynomial space and time over the number of symbols making up the pattern to be matched. The technique is thus very scalable and pattern matching can be performed at reduced costs.
Further, since the predicates defining symbols for Class A patterns are defined independent of other symbols, it follows that the set of symbols that an input event can be bound to is independent of the current bindings. Further, since an FSA is a right-invariant equivalence relation over S* (that is if xRMy then xzRMyz for strings x,y and any string z), and the preferment rules are prefix based, only one of these bindings is maintained per state. Accordingly, the number of active bindings at any point in time is bound by the number of states and is equal to one plus the length of the pattern to be matched.
In the manner described above, embodiments of the present invention are capable of automatically identifying Class A pattern based upon the input pattern to be matched and based upon the predicates associated with the pattern symbols. Upon identifying a pattern as a Class A pattern, embodiments of the present invention are configured to select and apply a pattern matching technique that is appropriate for processing Class A patterns. The application of the selected technique enables processing of event streams for detecting Class A patterns to be performed efficiently (e.g., in terms of memory and processing resources used) and in a manner that is scalable.
Class A patterns represent a class of patterns which can be used to model a large number of use cases. Since the number of patterns that can be generally specified can be quite large and may require a significant amount of computing resources, it becomes beneficial to identify a subclass (e.g., Class A patterns) of the global universe of patterns that is widely used and for which an efficient customized pattern matching solution is applied as described above.
As described above, Class A patterns represent a subset of patterns that may be specified for pattern matching. The following section describes a more generalized technique for performing pattern matching in input event streams for patterns that may not fall under the umbrella of Class A patterns.
The above section described a technique for identifying Class A patterns and performing pattern matching for this specific subclass of patterns in polynomial space and polynomial time. However, there are several patterns that do not qualify as Class A patterns. This section describes a technique for performing pattern matching for general patterns, which will be referred to as Class B patterns to differentiate them from Class A patterns. A Class B pattern may include a Class A pattern.
Class B patterns are general patterns that are not restricted by the limitations imposed on Class A patterns. One of the differences between processing of Class A patterns and the Class B patterns is that there may be multiple bindings in the Class B patterns scenario that are associated with a given state of the FSA at any point in time and that need to be maintained for processing of the next event while in the Class A pattern case at most one binding associated with a given state of the FSA may be maintained at any point in time. As a result, for Class A patterns that the number of bindings that is maintained after processing an event is bounded by the number of states, which itself is proportional to the number of symbols in the pattern to be matched, thus yielding a solution that is polynomial in space and time over the number of symbols making up that pattern.
Further, unlike Class A patterns, a predicate associated with a symbol in a Class B pattern may contain references to other symbols (e.g. a predicate associated with a symbol A be defined as (A.price<B.price), where B is another symbol having its own associated predicate). Accordingly, a predicate for a symbol in Class B patterns may be dependent on other symbols.
The framework for performing Class B pattern matching may be divided into two stages: (1) a compile or design time stage during which an automaton is constructed for the query; and (2) a runtime stage during which the automaton generated in (1) is used to guide the pattern matching process. Bindings representing partial and/or full matches are maintained during the runtime stage processing. In the first stage, if the pattern is included in a query, the query is compiled into an execution plan that comprises the automaton for the query. The plan is then executed at runtime.
As depicted in
The out-transitions from each state are ordered to handle the preferment rules (step 906). In order to identify the most preferred match, while applying transitions to a binding in state S, the transitions are applied in a specific order. This order (among the set of transitions from a state) is determined at compile time and stored as part of the automaton. Included in this order, is a rank for the “finality” of the state (applicable only for final states). This is done to accommodate the preferment rules. In the presence of reluctant quantifiers (such as *?) sometimes “shorter” matches are preferred. However, for greedy quantifiers (such as “longer” matches are preferred. Using this technique of introducing a rank amongst the set of out transitions for an “imaginary” transition corresponding to the finality of a state (applies only to a final state), such decisions can be made in a manner consistent with the overall framework (and without having to special case the final state during runtime processing) that handles the preferment rules. The following is an invariant there will be only one start state and the start state does not have any incoming edges.
Several operators such as CONCATENATION, ALTERNATION, and various QUANTIFIERS (e.g., *, ?, +) may be used for one or a group of symbols. Examples of operators and quantifiers that may be used are described in “Pattern matching in sequences of rows (12)” document. These operators and quantifiers are handled in the recursion step in 904. For example, the CONCATENATION operator may be handled in the recursive step in the following manner. Consider an example R.S where R is the left regular expression and S is the right regular expression. Let F be the FSA corresponding to R and G be the FSA corresponding to S. Let Y be the set of final states in F. Let J be the start state of G. The FSA corresponding to the union of F and G may be called as H. Accordingly, all the out-transitions from state J in FSA G are copied to each state Y in FSA H. These new transitions are introduced to each state in Y at the position of its “finality” rank in the same order as they appeared in state J of FSA G (note that all states in Y were final in F and hence would have a “finality” rank in the order of their out transitions). Note that each state in Y remains final if and only if J was a final state in G. State J is then removed from H. Other operators such as ALTERNATION, GROUPING, and Quantifiers across groups may also handled individually in a similar manner.
Referring back to
Evaluators are then prepared for each of the defined predicates (e.g., predicates specified by the DEFINE clause in a query) (step 910). Evaluators are also prepared for the expressions in the MEASURES clause (step 912). These evaluators are the mechanism used to evaluate a DEFINE predicate to determine the set of symbols that an input event corresponds to. For Class B patterns, this is done in the context of the binding, i.e., for a binding b1, the same input may evaluate to a symbol A while for binding b2, it may evaluate to B.
The FSA constructed as described above and depicted in
The runtime pattern matching processing may be explained using the following definitions. Consider a situation where an input tuple or event i has been processed and an input tuple or event (i+1) is to be processed. A binding after processing of e(i) may be in one of following three disjoint states:
Derived bindings may also be defined. Consider a binding b1 in AB after event i has been processed. Now suppose on processing event (i+1), this binding can be “grown” to bd1, bd2, . . . bdk. Then all these bindings are considered to be derived from b1.
Based upon the above definitions, the following observations/invariants may be made.
Based on the above, the following invariants also hold:
As depicted in
Bindings are then iteratively selected from list AFBL in decreasing order of preferment and processing according to steps 1006, 1008, 1010, 1012, 1014, 1016, 1017, 1018, 1020, and 1022. A binding from list AFBL is selected in decreasing order of preferment (step 1006). The binding selected in step 1006 will be referred to as binding “b”. A check is then made to see if b is in AB (step 1008). If binding b is determined to not be in AB, then binding b is inserted into list NEW_AFBL (step 1010). Processing then continues with step 1022.
If it is determined in 1008 that b is in AB, then ALPHA is set to the symbols that are matched by event ei+1 (step 1012). The symbols in ALPHA are then selected iteratively in order of the out-transitions on the corresponding state of the FSA and processed according to steps 1014, 1016, 1017, 1018, and 1020. A symbol is selected from ALPHA for processing (step 1014). The symbol selected in 1014 will be referred to as symbol “a”. A check is then made to see if there is a binding ba gotten by applying symbol a on binding b (step 1016). If such a binding ba exists then the binding ba is inserted into list NEW_AFBL (step 1017). Further, if ba is moving into FB for the first time then newFinal(ba) is set to TRUE (step 1018). This is to identify whether in this iteration there is a binding that has moved into a final state. This means that all bindings that would be created following this need not be considered (hence need not be inserted into NEW_AFBL). Nothing is done if no such binding ba exists. A check is then done to see if all symbols in ALPHA have been processed (step 1020). If all symbols in ALPHA have not been processed, then processing continues with step 1014 wherein the next symbol that has not yet been processed is selected. Else processing continues with step 1022.
A check is then made to see if all bindings in AFBL have been processed (in decreasing order of preferment) (step 1022). If it is determined in 1022 that all bindings in AFBL have not been processed, then processing continues with step 1006 wherein another unprocessed binding is selected. If it is determined in 1022 that all bindings in AFBL have not been processed, then, in order to handle state Q0, new bindings are inserted into NEW_AFBL in appropriate order (step 1024). The order would correspond to iterating through the out-transitions of state Q0 in the order in which they appear in the FSA. The processing would correspond to b is in AB.
The bindings in list NEW_AFBL are then processed. In order to facilitate the processing, a variable “delete_remaining” is set to FALSE and another variable “found_ab” is set to FALSE (step 1026). The bindings in list NEW_AFBL are processed according to steps 1028 onwards (1028 to 1054). A binding is selected from NEW_AFBL for processing (step 1028). The binding selected in 1028 will be referred to as b.
Processing is then performed based upon the state of the selected binding, whether it is MU, AMU, or PA. A check is performed to see if the state of the binding selected in 1028 is MU (step 1030). If the state of binding b is not MU, then processing continues with step 1042. If it is determined in 1030 that the state of the binding is MU, then if delete_remaining is TRUE then the binding b is deleted from NEW_AFBL (step 1032). Then, if newFinal(b) is TRUE, delete_remaining is set to TRUE (step 1034). Then, if found_ab is FALSE (i.e., !found_ab), then binding b is reported as a match and binding b is deleted from NEW_AFBL (step 1040).
A check is made to see if the state of binding b selected in 1028 is AMU (step 1042). If the state of binding b is not AMU, then processing continues with step 1050. If it is determined in 1042 that the state of the binding is AMU, then if delete_remaining is FALSE (i.e., !delete_remaining) and newFinal(b) is true, then delete_remaining is set to TRUE (step 1044). Else, if delete_remaining is TRUE then binding b is deleted from NEW_AFBL (step 1046). The variable found_ab is then set to TRUE (step 1048).
If the state of binding b is neither MU nor AMU, then the state of b is PA. In such a case, if delete_remaining is set to TRUE then binding b is deleted from NEW_AFBL (step 1050). The variable found_ab is set to TRUE (step 1052). Processing then continues with step 1054.
A check is then made to see if all bindings in list NEW_AFBL have been processed (step 1054). If all bindings in NEW_AFBL are determined to have been processed then the processing ends, else processing continues with step 1028 wherein a new binding is selected for processing.
At the end of processing of event ei+1, it can be verified that the seven invariants listed above hold. It should be noted that the method depicted in
In an embodiment of the present invention, an input event stream may be partitioned into multiple different streams based for example upon a symbol. The pattern matching techniques described above may, then, be applied over each sub-stream. In this scenario, a query comprising a regular expression is compiled into a PLAN that is then used at runtime processing for detecting the pattern over the partitioned multiple streams. The compilation process comprises building an FSA for the regular expression. This may involve building a base FSA for each symbol and then combining the FSAs to form a single FSA, which is then used at runtime processing.
The following SQL query provides an example of how an input event stream may be partitioned using a symbol, and pattern matching may then be applied over each sub-stream.
The complex pattern that this query specifies is what is known as a “double bottom” or “W” shaped pattern. The requirement is to match non-overlapping maximal “W” patterns and from all the events constituting a match, output a single event corresponding to the match that reports the symbol, the price at the beginning of the fall and the price at the end of the last rise.
The following definitions are used to describe the pattern matching processing:
The pattern matching process proceeds as follows:
The processing described above ensures that ready to output bindings are on hold until all the potential output bindings (unsure bindings) whose matched timestamp is less than the ready to output bindings either become ready to output or cannot be developed further.
Responsibility of pattern processor is to output the matched events in order of time. In one partition there may be a match ready for output and in another partition there is a match that is being held back by preferment.
As described above, extensions are provided to SQL that transform SQL into a rich expressive language for performing pattern matching using regular expressions. The extensions enhance the ability of SQL to support pattern matching on events. Extensions to support or model regular expression-based pattern matching on event streams may also be provided for other programming languages.
Pattern matching using regular expressions over continuously arriving events of an event stream, as described above, has wide applicability in various fields and applications. Examples include financial services, RFID based applications such as inventory management, click stream analysis applications, electronic health systems, and the like. For example, in financial services, a trader may use the pattern matching techniques described above to identify trends in the stock market based upon a stream of incoming ticker stock prices. As another example, in RFID-based tracking and monitoring, the pattern matching techniques described above may be used to track valid paths of shipments and detect anomalies.
While embodiments of the present invention have been described above with respect to Class A and Class B patterns, in alternative embodiments various different types of patterns may be recognized and processed accordingly. For a particular class of pattern that is detected, an embodiment of the present invention is configured to select and apply a pattern matching technique that is appropriate for that type of pattern. In this manner, embodiments of the present invention optimize and increase the efficiency of pattern matching performed over event streams.
This section describes techniques for constructing a nondeterministic finite state automata (NFSA) given a regular expression used to express a pattern to be recognized according to an embodiment of the present invention. Description is provided for generating an NFSA for a basic regular expression such as ‘A’. Description is then provided for the necessary transformations for each of the regular expression operators such as Concatenation, Alternation, Greedy Quantifiers—‘*’,‘+’,‘?’ and Lazy Quantifiers—‘*?’, ‘+?’, ‘??’.
In one embodiment, a regular expression is maintained in a tree representation (which is actually a unique parse tree for that regular expression) constructed by taking into account the precedence and associativity of regular expression operators. Like most algorithms operating on tree data structure, the process of construction of NFSA given a regular expression in tree form is also recursive in nature. A standard NFSA is constructed for basic regular expression that is nothing but a single correlation variable and then gradually the entire NFSA is built by applying the transformations for different operators involved.
A basic regular expression is simply a single correlation variable e.g. A. The machine for this basic regular expression consists of two states: 0 and 1.
A state diagram for a single correlation variable e.g. ‘A’ is shown in
The concatenation operator is a binary operator. First, the NFSA for the left and right operands are obtained and then merged to get the NFSA for the concatenated regular expression.
Let ‘L’—number of states in left operand NFSA
‘R’—number of states in right operand NFSA
The start state of right NFSA is not considered and so the number of states in the merged NFSA is L+R−1. Also the states are numbered 0 through L+R−2.
The steps for merging the two NFSAs are as follows:
The alternation operator is a binary operator. First, the NFSA for the left and right regular expressions are obtained and then join them together to get the NFSA for the complete regular expression.
Let ‘L’—number of states in left operand NFSA and
‘R’—number of states in right operand NFSA
In the joined NFSA, a new state is created for start state that has all the transitions of start states of left as well as right NFSA. We do away with the start states of left and right NFSA. So the number of states in the joined NFSA is L+R−1. Also the states are numbered 0 through L+R−2.
The two NFSAs are joined as follows:
Quantifiers that may be supported in a regular expression include greedy quantifiers (*, +, ?) and lazy (*?, +?, ??) quantifiers. These quantifiers can be applied over simple regular expressions like A, B, etc. or over complex regular expressions formed by applying ‘concatenation’ and/or ‘alternation’ over simple regular expressions e.g., (AB)*, (A|B)*, etc. Repeated applications of these quantifiers in any order is also allowed yielding regular expressions like (A*)?, (A*?B+C?)+, etc. In the techniques described below for handling quantifiers, a machine constructed for the unary operand (whether simple/complex) of the quantifier is first obtained and then the constructed NFSA is appropriately modified depending on the quantifier, as per the rules stated below.
This section provides an example of constructing an NFSA based upon the rules described above. Consider a regular expression “(A? B*|C*?)+”. Here ‘+’ is applied over the expression in brackets. The expression inside brackets has two alternation components: ‘A? B*’ and ‘C*?’. The first one of these components is concatenation of ‘A?’ and ‘B*’. The process of constructing a state machine for this regular expression is as follows:
Let ‘N’ be the number of alphabets in the regular expression and ‘S’ be the number of states in the state diagram of that regular expression constructed by using the algorithms described in this document. Then S=N+1 always, which means S is linear in ‘N’. This can be proven using the principle of induction as follows:
M=N*S=N*(N+1)=O(N̂2).
So in the worst case, M is quadratic in N.
Client computing devices 1302, 1304, 1306, 1308 may be general purpose personal computers (including, by way of example, personal computers and/or laptop computers running various versions of Microsoft Windows and/or Apple Macintosh operating systems), cell phones or PDAs (running software such as Microsoft Windows Mobile and being Internet, e-mail, SMS, Blackberry, or other communication protocol enabled), and/or workstation computers running any of a variety of commercially-available UNIX or UNIX-like operating systems (including without limitation the variety of GNU/Linux operating systems). Alternatively, client computing devices 1302, 1304, 1306, and 1308 may be any other electronic device, such as a thin-client computer, Internet-enabled gaming system, and/or personal messaging device, capable of communicating over a network (e.g., network 1310 described below). Although exemplary system environment 1300 is shown with four client computing devices, any number of client computing devices may be supported. Other devices such as devices with sensors, etc. may interact with server 1312.
System environment 1300 may include a network 1310. Network 1310 may be any type of network familiar to those skilled in the art that can support data communications using any of a variety of commercially-available protocols, including without limitation TCP/IP, SNA, IPX, AppleTalk, and the like. Merely by way of example, network 1310 can be a local area network (LAN), such as an Ethernet network, a Token-Ring network and/or the like; a wide-area network; a virtual network, including without limitation a virtual private network (VPN); the Internet; an intranet; an extranet; a public switched telephone network (PSTN); an infra-red network; a wireless network (e.g., a network operating under any of the IEEE 802.11 suite of protocols, the Bluetooth protocol known in the art, and/or any other wireless protocol); and/or any combination of these and/or other networks.
System environment 1300 also includes one or more server computers 1312 which may be general purpose computers, specialized server computers (including, by way of example, PC servers, UNIX servers, mid-range servers, mainframe computers, rack-mounted servers, etc.), server farms, server clusters, or any other appropriate arrangement and/or combination. In various embodiments, server 1312 may be adapted to run one or more services or software applications described in the foregoing disclosure. For example, server 1312 may correspond to an events processing server as depicted in
Server 1312 may run an operating system including any of those discussed above, as well as any commercially available server operating system. Server 1312 may also run any of a variety of additional server applications and/or mid-tier applications, including HTTP servers, FTP servers, CGI servers, Java servers, database servers, and the like. Exemplary database servers include without limitation those commercially available from Oracle, Microsoft, Sybase, IBM and the like.
System environment 1300 may also include one or more databases 1314 and 1316. Databases 1314 and 1316 may reside in a variety of locations. By way of example, one or more of databases 1314 and 1316 may reside on a storage medium local to (and/or resident in) server 1312. Alternatively, databases 1314 and 1316 may be remote from server 1312, and in communication with server 1312 via a network-based or dedicated connection. In one set of embodiments, databases 1314 and 1316 may reside in a storage-area network (SAN) familiar to those skilled in the art. Similarly, any necessary files for performing the functions attributed to server 1312 may be stored locally on server 1312 and/or remotely, as appropriate. In one set of embodiments, databases 1314 and 1316 may include relational databases, such as Oracle 10g, that are adapted to store, update, and retrieve data in response to SQL-formatted commands.
Computer system 1400 may additionally include a computer-readable storage media reader 1412, a communications subsystem 1414 (e.g., a modem, a network card (wireless or wired), an infra-red communication device, etc.), and working memory 1418, which may include RAM and ROM devices as described above. In some embodiments, computer system 1400 may also include a processing acceleration unit 1416, which can include a digital signal processor (DSP), a special-purpose processor, and/or the like.
Computer-readable storage media reader 1412 can further be connected to a computer-readable storage medium 1410, together (and, optionally, in combination with storage device(s) 1408) comprehensively representing remote, local, fixed, and/or removable storage devices plus storage media for temporarily and/or more permanently containing computer-readable information. Communications system 1414 may permit data to be exchanged with network 1310 and/or any other computer described above with respect to system environment 1300.
Computer system 1400 may also comprise software elements, shown as being currently located within working memory 1418, including an operating system 1420 and/or other code 1422, such as an application program (which may be a client application, Web browser, mid-tier application, RDBMS, etc.). In an exemplary embodiment, working memory 1418 may include executable code and associated data structures (such as caches) used for the pattern matching method described above. It should be appreciated that alternative embodiments of computer system 1400 may have numerous variations from that described above. For example, customized hardware might also be used and/or particular elements might be implemented in hardware, software (including portable software, such as applets), or both. Further, connection to other computing devices such as network input/output devices may be employed.
Storage media and computer readable media for containing code, or portions of code, can include any appropriate media known or used in the art, including storage media and communication media, such as but not limited to volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage and/or transmission of information such as computer readable instructions, data structures, program modules, or other data, including RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, data signals, data transmissions, or any other medium which can be used to store or transmit the desired information and which can be accessed by a computer.
Although specific embodiments of the invention have been described, various modifications, alterations, alternative constructions, and equivalents are also encompassed within the scope of the invention. Embodiments of the present invention are not restricted to operation within certain specific data processing environments, but are free to operate within a plurality of data processing environments. Additionally, although embodiments of the present invention have been described using a particular series of transactions and steps, it should be apparent to those skilled in the art that the scope of the present invention is not limited to the described series of transactions and steps.
Further, while embodiments of the present invention have been described using a particular combination of hardware and software, it should be recognized that other combinations of hardware and software are also within the scope of the present invention. Embodiments of the present invention may be implemented only in hardware, or only in software, or using combinations thereof.
The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. It will, however, be evident that additions, subtractions, deletions, and other modifications and changes may be made thereunto without departing from the broader spirit and scope as set forth in the claims.
This application claims the benefit and priority under 35 U.S.C. 119 (e) of U.S. Provisional Application Ser. No. 61/092,983, filed Aug. 29, 2008, entitled FRAMEWORK FOR SUPPORTING REGULAR EXPRESSION-BASED PATTERN MATCHING IN DATA STREAMS, the contents of which are herein incorporated by reference in their entirety for all purposes. The present application incorporates by reference for all purposes the entire contents of the following related applications filed concurrently with the present application: (1) U.S. application Ser. No. ______, titled TECHNIQUES FOR MATCHING A CERTAIN CLASS OF REGULAR EXPRESSION-BASED PATTERNS IN DATA STREAMS (Attorney Docket No. 021756-056500US; OID-2008-152-01US); and (2) U.S. application Ser. No. ______, titled TECHNIQUES FOR PERFORMING REGULAR EXPRESSION-BASED PATTERN MATCHING IN DATA STREAMS (Attorney Docket No. 021756-056700US; OID-2008-153-02US).
Number | Date | Country | |
---|---|---|---|
61092983 | Aug 2008 | US |