...
Preprocessing
With some preprocessing we will get:
...
Code Block |
---|
#PARSER PQL #ADDQUERY in = CSVFILESOURCE({SCHEMA = [['ID', 'String'],['pos','STARTTIMESTAMP'],['isLast','Boolean']], DELIMITER = '\t', SOURCE = 'source', FILENAME = '${PROJECTPATH}/input.csv'}) map = STATEMAP({EXPRESSIONS = [['isNull(__last_1.ID) OR (__last_1.ID != ID)','newElem']], KEEPINPUT = true}, in) |
we will get:
Code Block |
---|
ID|TIME|ISLAST|NEWELEM A|1|false|true | META | 1|oo A|2|false|false | META | 2|oo A|3|false|false | META | 3|oo A|4|true|false | META | 4|oo B|5|false|true | META | 5|oo B|6|false|false | META | 6|oo B|7|false|false | META | 7|oo B|8|false|false | META | 8|oo B|9|false|false | META | 9|oo B|10|true|false | META | 10|oo C|11|false|true | META | 11|oo C|12|false|false | META | 12|oo C|13|false|false | META | 13|oo C|14|false|false | META | 14|oo C|15|false|false | META | 15|oo C|16|false|false | META | 16|oo |
Using only a start predicate
Code Block |
---|
win = PREDICATEWINDOW({start = 'newElem', SAMESTARTTIME = true}, map) |
...
Using a start and an end predicate
Code Block |
---|
#PARSER PQL
#ADDQUERY
in = CSVFILESOURCE({SCHEMA = [['ID', 'String'],['pos','STARTTIMESTAMP'],['isLast','Boolean']], DELIMITER = '\t', SOURCE = 'source', FILENAME = '${PROJECTPATH}/input.csv'})
map = STATEMAP({EXPRESSIONS = [['isNull(__last_1.ID) OR (__last_1.ID != ID)','newElem']], KEEPINPUT = true}, in)
win = PREDICATEWINDOW({start = 'newElem', end = 'newElem', SAMESTARTTIME = true}, map) |
...
Using a start and an end predicate and keeping the ending element:
Code Block |
---|
#PARSER PQL
#ADDQUERY
in = CSVFILESOURCE({SCHEMA = [['ID', 'String'],['pos','STARTTIMESTAMP'],['isLast','Boolean']], DELIMITER = '\t', SOURCE = 'source', FILENAME = '${PROJECTPATH}/input.csv'})
map = STATEMAP({EXPRESSIONS = [['isNull(__last_1.ID) OR (__last_1.ID != ID)','newElem']], KEEPINPUT = true}, in)
win = PREDICATEWINDOW({start = 'newElem', end = 'isLast', KEEPENDINGELEMENT = true, SAMESTARTTIME = true}, map) |
...