温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
接下来我们已经知道呃,什么叫做时间语义了,那我们更关心的呢,在代码中往往更关心的是even time是事件时间啊,那在这个代码当中到底怎么样去设置这个事件时间呢?也是非常的简单,大家看其实就是在这个环境,在环境里面设,对吧,已经有这个get execution environment之后直接呢,点set stream time characteristic来看,这个有点长啊,但是非常的明白,对吧?这个语义非常的明白,他说的是什么设置当前流处理里边的时间特性,Time character characteristic,对吧?然后里边传什么参数呢?要传的就是一个time characteristic,它里边啊,你就可以直接点type,这里边给大家还是在代码里面看一眼啊,非常简单。我们呃,前面这个就可以关掉啊,这个就前面的测试这个就关掉了,然后接下来我们可以在这里大家看直接用这个set啊,大家看stream time character characteristic,对吧,直接就能弹出来,不用我们我们大概只要记得它是个什么东西就行,你去找就可以了啊,自己会给我们补全的,然后里边呢,要传的就是一个time characteristic啊,大家注意把这个引入,它是个枚举类型,刚才大家看到了对吧,这是个举类型,这里边呢,你一点儿就看到有几个选项,Even time just time presenting time,这不就是我们说的这个三种时间语义吗?对吧,你如果要用这个事件时间语义的话,直接这里边把它改成这个就可以了啊,所以其实还是非常简单的啊,但是事件时间。
01:42
语义大家注意啊,不是简简单单只这么一改,后边你如果再去执行这个代码,它就是按照我们事件时间去去去定了,去跑了,大家想想呃,为为什么不能简简单单这么一设置就完事呢?就是因为我们现在如果你是处理时间的话,这个简单系统时间嘛,弗林和底层当然知道你现在的这个时间是什么,但是如果是事件时间的话,这个时间是不是得从数据里边去提取啊,对吧?你现在这个数据叫做s reading,那那这里边我们这里边s reading里边是定义了一个叫做time stamp的一个一个这个字段,对吧,一个属性,那弗link,我怎么知道你这里边定义的这个名字到底是叫什么呢?你是叫time stamp还是叫time对吧?还是叫这个TS,呃,或者说你是还是叫date,我怎么知道你叫什么名啊,它不可能根据某一个特定的字段去判断啊,我就用它做这个时时间戳对吧?所以没有这样的一种方式,所以呢,在后边我们进行就是如果你想使用这个事件时间语义的话,还必须在后边有一步操作,就是从当前的数据里边提取它的时间戳,然后告诉我们好。
02:58
现在的事件时间按照什么作为标准呢?就按照这个数据里边的这个时间戳作为标准,对吧?哎,我们当时不是说,呃,你这个看这个数据,它应该到底属于哪个窗口里边,那接下来你就不是按照它到达这个,哎,我们当前这个算子系统时间来定它到底属于哪个窗口了,而是得去看它的时间戳了,对吧?啊就就用这样的一个方式实现这样的处理了,这样的话就能保证,呃,即使是它到的迟,我们也可以把它收进去啊,这是这种啊啊,但具体代码里边的设置,因为这个时间戳的提取呢,跟后边的watermark是结合在一起的,所以我们放到后面再给大家一起来说,然后这里边还有一个问题,就是前面我们并没有设置这个时间语义啊啊,那这里面会是什么样子呢?
03:45
其实这里边非常简单,大家知道如果不设置的话,时间语义就应该是processing time对吧?默认就是processing time啊,那这里边具体来讲,大家可以看到在底层我们这里边其实就会有这样的一个调用对吧?呃,这里边其实就会给大家在里边去判断当前的时间语义去做调用,然后呃,接下来我们就可以按照当前的时间语义去处理时间窗口到底是什么时候关,比方说我开了一个啊,这个15秒的窗口,对吧?那你这个15秒到底是按照我的系统时间走15秒,还是说呃,就是数据的那个时间,过了15秒我才算数呢,哎,这就有不同的这个含义了啊,这是关于这个时间语义的设置。
我来说两句