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