阿里云Watermark介绍

Watermark是一种衡量Event Time进展的机制,它是数据本身的一个隐藏属性,watermark的定义是source 表DDL定义的一部分。实时计算Streaming无需在SQL语句中显示定义一个watermark,而是在页面中可指定字段,并配置偏移量,页面的配置方法请参考快速启动中的 数据开发 。
案例

通常一条记录中的某个字段就代表了该记录的发生时间,比如表中有个rowtime字段,类型为Timestamp,其中某一值为1501750584000(2017-08-03 08:56:24.000)。那么如果用户需要定义一个基于该rowtime列的watermark,watermark策略为偏移4秒,那么,这条数据的watermark时间就是1501750584000 - 4000= 1501750580000(2017-08-03 08:56:20.000)。这条数据的watermark时间是什么含义呢?即:timestamp小于1501750580000(2017-08-03 08:56:20.000)的数据,都已经到达了。

总结

1.WaterMark的含义是所有时间t’< t的事件都已经发生。假如Watermark t已经生效,那么后续EventTime小于t的记录都会被丢掉(暂时blink的做法是丢弃这些来的更晚的数据,以后会给用户配置,让更晚的数据也能继续update)。

2.针对乱序的的流,WaterMark至关重要,这样即使一些事件延迟到达,也不至于过于影响window窗口的计算的正确性。

3.并行数据流中,当Operator有多个输入流时,Operator的event time以最小流event time为准,图示如下:

最后,给出一个使用event time做aggregate的例子:

SELECT user, SUM(amount) FROM Orders

GROUP BY TUMBLE(rowtime, INTERVAL '1' DAY), user