partition by with tumble导致flinksql异常

xoshrz7s  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(615)

我想使用flinksql选择处理窗口的最后一个元素。试图通过 ROW_NUMBER 在blink planner中。尝试了以下查询:

SELECT * FROM (
  SELECT key, value, ROW_NUMBER() OVER w AS rn
    FROM InputTable
  WINDOW w AS (PARTITION BY key, TUMBLE(rt, INTERVAL '15' MINUTE) ORDER BY -ts)
) WHERE rn = 1

// rt = ts.rowtime, ts is Long

不幸的是,这会导致异常

org.apache.flink.table.planner.codegen.CodeGenException: Unsupported call: TUMBLE(TIMESTAMP(3) *ROWTIME*, INTERVAL SECOND(3) NOT NULL) 
If you think this function should be supported, you can create an issue and start a discussion for it.

知道我做错什么了吗?我在想 TUMBLE 功能相当于计算 rowtime % interval .

swvgeqrz

swvgeqrz1#

TUMBLE (以及 HOP 以及 SESSION )是flink sql(版本2.11)中的特殊内置函数,只能在 GROUP BY 条款。原则上你是对的,应该可以使用 TUMBLE 但在这一点上根本不支持。
您可以实现一个用户定义的函数来重新实现 TUMBLE 但是,我不建议这样做,因为查询的性能不好。flink sql不会意识到分区( PARTITION BY key, TUMBLE(rt, INTERVAL '15' MINUTE )只会“活跃”35分钟并永远保持其状态。因此,随着时间的推移,查询将积累越来越多的状态,这会减慢检查点和恢复的速度。国际海事组织,这样的时间为基础的 OVER 将来应该支持分区,但现在还不支持。

相关问题