flink SQL 不支持嵌套 match_recognize 查询?

Nested match_recognize query not supported in flink SQL?

我正在使用 flink 1.11 并尝试嵌套查询,其中 match_recognize 位于其中,如下所示:

select * from events where id = (SELECT * FROM events MATCH_RECOGNIZE (PARTITION BY org_id ORDER BY proctime MEASURES A.id AS startId ONE ROW PER MATCH PATTERN (A C* B) DEFINE A AS A.tag = 'tag1', C AS C.tag <> 'tag2', B AS B.tag = 'tag2'));

我收到一个错误:org.apache.calcite.sql.validate.SqlValidatorException: Table 'A' not found

不支持吗?如果不是,还有什么选择?

我可以通过这样做得到一些东西:

Table events = tableEnv.fromDataStream(input,
    $("sensorId"),
    $("ts").rowtime(),
    $("kwh"));

tableEnv.createTemporaryView("events", events);

Table matches = tableEnv.sqlQuery(
                "SELECT id " +
                    "FROM events " +
                    "MATCH_RECOGNIZE ( " +
                        "PARTITION BY sensorId " +
                        "ORDER BY ts " +
                        "MEASURES " +
                            "this_step.sensorId AS id " +
                        "AFTER MATCH SKIP TO NEXT ROW " +
                        "PATTERN (this_step next_step) " +
                        "DEFINE " +
                            "this_step AS TRUE, " +
                            "next_step AS TRUE " +
                    ")"
        );

tableEnv.createTemporaryView("mmm", matches);

Table results = tableEnv.sqlQuery(
    "SELECT * FROM events WHERE events.sensorId IN (select * from mmm)");

tableEnv
    .toAppendStream(results, Row.class)
    .print();

出于某种原因,我无法在不定义视图的情况下使其工作。我一直收到方解石错误。

我猜您是想避免在 MATCH_RECOGNIZE 的 MEASURES 子句中枚举 A 中的所有列。您可能想要比较生成的执行计划,看看是否存在任何显着差异。