Hi, Flink relational apis with MATCH_RECOGNITION looks very attractive and promising but it's currently not easy to use at all.
While looking into [1], especially the following DEFINE clause, > DEFINE > PRICE_DOWN AS > (LAST(PRICE_DOWN.price, 1) IS NULL AND PRICE_DOWN.price < START_ROW.price) OR > PRICE_DOWN.price < LAST(PRICE_DOWN.price, 1), > PRICE_UP AS > PRICE_UP.price > LAST(PRICE_DOWN.price, 1) what came up to my mind is that the condition is quite verbose. Meanwhile, I found [2] in which Oracle uses the similar data and the MATCH_RECOGNIZE clause as follows: > SELECT * > FROM Ticker MATCH_RECOGNIZE ( > PARTITION BY symbol > ORDER BY tstamp > MEASURES STRT.tstamp AS start_tstamp, > LAST(DOWN.tstamp) AS bottom_tstamp, > LAST(UP.tstamp) AS end_tstamp > ONE ROW PER MATCH > AFTER MATCH SKIP TO LAST UP > PATTERN (STRT DOWN+ UP+) > DEFINE > DOWN AS DOWN.price < PREV(DOWN.price), > UP AS UP.price > PREV(UP.price) > ) MR > ORDER BY MR.symbol, MR.start_tstamp; > > Oracle's way of defining pattern variables looks much simple and neat thanks to 1) its use of PREV which is not available in Flink's MATCH_RECOGNIZE clause (mentioned in [3]) 2) no need to check the initial case or when there is no last row that met the PRICE_DOWN condition Is there a way to shorten the DEFINE cluase in MATCH_RECOGNIZE at Flink 1.8 or 1.9? If there's any plan regarding this, could anyone let me know related Jira issues? Best, Dongwon [1] https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/streaming/match_recognize.html#introduction-and-examples [2] https://docs.oracle.com/database/121/DWHSG/pattern.htm [3] https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/streaming/match_recognize.html#known-limitations