窗口
Tumbling Window(滚动窗口)
Sliding Window(滑动窗口)
Session Window
时间是左闭右开
windowAll
Time.milliseconds(x)
Time.seconds(x)
Time.minutes(x)
// 设置偏移量为东八区
input
.keyBy(<key selector>)
.window(TumblingEventTimeWindows.of(Time.days(1), Time.hours(-8)))
Trigger(触发器)
Evictor(驱逐器)
Watermark
生成
SourceFunction
// element是数据,timestamp是event time时间戳。
collectWithTimestamp(T element, long timestamp);
emitWatermark(Watermark mark);
流程中指定
DataStream.assignTimestampsAndWatermarks()
两类:定期生成和更具特殊记录生成。AssignerWithPeriodicWatermarks
:定时生成。AssignerWithPunctuatedWatermarks
:每来一个记录都会调用一次。
最佳实践:DataStream越靠近Source越好。更多算子可以判断是否乱序。
Watermark传播
Time
ProcessFunction
Table API
从DataStream转化和通过TableSource生成。
processing time
proctime必须添加到最后。
tEnv.fromDataStream(stream, "f1, f2, f3.proctime");
TableSource实现DefinedProctimeAttributes接口
event time
要求:DataStream里得有TIMESTAMP和Watermark。
tEnv.fromDataStream(stream, "f1, f2, f3.rowtime");
TableSource实现DefinedRowtimeAttributes接口。要求:必须存在LONG或TIMESTAMP字段。
数据和元数据
DataStream API 时间是元数据。
SQL & Table API 时间是数据。
Upsert Stream 不允许出现时间字段。只能当元数据。