是否可以rowtime在第一次session聚合后修改属性,使其等于.rowtime会话中最后一次观察到的事件?
我正在尝试做这样的事情:
table
.window(Session withGap 2.minutes on 'rowtime as 'w)
.groupBy('w, 'userId)
.select(
'userId,
('w.end.cast(Types.LONG) - 'w.start.cast(Types.LONG)) as 'sessionDuration,
('w.rowtime - 2.minutes) as 'rowtime
)
.window(Tumble over 5.minutes on 'rowtime as 'w)
.groupBy('w)
.select(
'w.start,
'w.end,
'sessionDuration.avg as 'avgSession,
'sessionDuration.count as 'numberOfSession
)
关键部分是:
('w.rowtime - 2.minutes) as 'rowtime
所以我想重新分配.rowtime会话中最新事件的记录,没有会话间隙(2.minutes在本例中)。
这在BatchTable中工作正常,但它在StreamTable中不起作用:
Exception in thread "main" org.apache.flink.table.api.ValidationException: TumblingGroupWindow('w, 'rowtime, 300000.millis) is invalid: Tumbling window expects a time attribute for grouping in a stream environment.
是的,我知道,我觉得我不想发明时间机器并改变时间顺序。但实际上是否可能以某种方式实现所描述的行为?
你不能在当前版本(1.6.0)中使用SQL或Table API来做到这一点。一旦修改了时间属性(rowtime或proctime),它就会成为常规TIMESTAMP属性并失去其特殊时间特征。
对于rowtime属性,原因是我们无法保证时间戳仍与水印对齐。原则上,我们可以通过减去的时间间隔来延迟水印,但是现在还不支持。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。