TSPatternMatch function

The TSPatternMatch function returns matches to a specified pattern of values.

Syntax

TSPatternMatch(
               ts            TimeSeries,
               table_name    LVARCHAR,
               primary_key   LVARCHAR,
               col_name      LVARCHAR
               begin_tstamp  DATETIME YEAR TO FRACTION(5),
               end_tstamp    DATETIME YEAR TO FRACTION(5),
               pattern       LIST(DOUBLE PRECISION NOT NULL),
               search_method INTEGER,
               similarity    DOUBLE PRECISION,
               unit_error    DOUBLE PRECISION)  
 returns LIST(SEARCHROW NOT NULL)
ts
The time series value for the specified primary key.
table_name
The name of the time series table. The table must contain a TimeSeries column and have a primary key.
primary_key
The primary key column name.
If the primary key consists of multiple columns, concatenate the column names. Include the table name qualifier before the column name and separate the table and column name combinations with a pipe character (|). For example, if the primary key consists of two columns, the format is:
'table_name.column_name1|table_name.column_name2'
col_name
The name of the column in the TimeSeries data type to search.

Must have a data type of SMALLFLOAT, FLOAT, INTEGER, SMALLINT, or BSON. For a BSON column, you can search individual fields within the BSON document that contain numeric data.

If you are searching a BSON field, include the field name after the subtype column name with dot notation. For example, if the subtype column is named value and the field that you want to search is named v1, set the col_name parameter to value.v1.
begin_stamp
The beginning point of the range to search. Can be NULL, which represents the first element in the time series.
end_stamp
The ending point of the range to search. Can be NULL, which represents the last element in the time series.
pattern
A list of double precision values that represent the pattern for which to search. Can be the result of the getPatternFromTS function.
search_method
The search method:
0 = Subsequence pattern match search. Evaluate all sequences of values.
1 = Whole pattern match search. Evaluate consecutive sequences of values.
similarity
A double precision number 0.0-1.0 that represents the percentage of values in a match that must be within the unit error. Default is 0.8 (80%).
unit_error
A positive double precision value that represents the limit of how much a matching value can differ from the corresponding value in the original pattern. Default is 0.1.

Usage

Run the TSPatternMatch function to find matches to a specific pattern of values in the specified time series and during the specified time range.

Returns

A list of matches in a LIST data type that contains a SEARCHROW data type value for each match. The SEARCHROW data type is a ROW data type with the following definition:

ROW(LVARCHAR,
    DATETIME YEAR TO FRACTION(5),
    DATETIME YEAR TO FRACTION(5),
    DOUBLE PRECISION)
    

The SEARCHROW data type fields have the following information:

  • The primary key value for the time series instance.
  • The begin point of the match.
  • The end point of the match.
  • The score of the match, as a double precision number 0.0-1.0 that represents the percentage of values in the matching sequence that are an exact match to the corresponding values in the search pattern.

Examples

The examples use the following TimeSeries row type definition, table, and data for two time series instances:

CREATE ROW TYPE myrow(tstamp datetime year to fraction(5), value1 real);

CREATE TABLE tsdata(id int primary key, ts1 timeseries(myrow));

INSERT INTO tsdata VALUES(1000, 
               "origin(2011-01-01 00:00:00.00000), calendar(ts_1month), 
                container(container), threshold(0), regular, 
                [(1),(1),(55),(55),(55),(55),(1),(45),(45),(45),(45),(1)]");

INSERT INTO tsdata VALUES(2000,
               "origin(2011-01-01 00:00:00.00000), calendar(ts_1month), 
                container(container), threshold(0), regular, 
                [(55),(55),(55),(55),(1),(1),(1),(1),(1),(1),(1),(1)]");

Example: Search for a pattern that is specified by the getPatternFromTS function

The following statement searches for a pattern that is specified by the getPatternFromTS function:

SELECT TSPatternMatch(tsdata.ts1, 'tsdata', '1000', 'value1', 
                      '2011-01-01 00:00:00.00000',
                      '2011-12-01 00:00:00.00000',
                      getPatternFromTS(B.ts1, '2011-01-01 00:00:00.00000', 
                                       '2011-04-01 00:00:00.00000', 'value1'),
                      0, 0.5, 0.5)
    FROM tsdata, tsdata as B 
    WHERE tsdata.id = 1000 and B.id=2000;

(expression)

LIST{ROW('1000','2011-03-01 00:00:00.00000','2011-06-01 00:00:00.00000',
         1.000000000000)}

Example: Search for a pattern that is specified by a list of values

The following statement runs the same search as the statement in the previous example, but the search pattern is specified by a list of values in a LIST data type:

SELECT TSPatternMatch(ts1, 'tsdata', '1000', 'value1', 
                      '2011-01-01 00:00:00.00000',
                      '2011-12-01 00:00:00.00000',
                      'LIST{55,55,55,55}'::LIST(DOUBLE PRECISION NOT NULL),
                      0, 0.5, 0.5)
   FROM tsdata 
   WHERE id = 1000;

(expression)

LIST{ROW('1000','2011-03-01 00:00:00.00000','2011-06-01 00:00:00.00000',
         1.000000000000)}