00:00
呃,上午呢,我们是看了。弗Li里边一个硫的照应data stream照对吧,但是其实在弗Li当中呢,它除了有这个硫的照,还有这个S方式,当然也属于硫啊,就是我说的这个硫呢,是data stream。是data STEM API,它这个join引方式对吧,我们上午看了,那其实他fli s呢也有join语,而S的join呢,对于我们来说可能会更熟悉一些,对吧,所以我们就直接写了,当然如果说你要去看这个官方文档也可以,我告诉你在哪啊呃。就是在这个circle啊circle,呃,Circle注意看啊。首先呢,进到这个文档当中来,对吧,首先点这个。啊,Application的一个。Development。然后呢是table epi and circle,就这个里边,然后circle点开circle这个呢有个query对吧,查询查询里边呢,有个draw。
01:00
啊,还有个S,就是说呢,在so里边join的方式非常多啊,我们来看一下对吧?当然so draw呢,基本的我们肯定都会写了,In the draw,直接写drawing let drawing weather drawing for drawing,对吧?啊,我们都会写了,但是呢,除此之外,它还有很多其他的。关联。啊,很多其他的观点对吧,你看这边。常规的一个draw对吧,In the draw all draw这两种。对吧,当然这个out draw当中呢,呃,包括什么left draw red draw跟for out draw,当然这个out可省,对吧,就for draw,这是我们说的,我说了弗Li so里边这些东西呢,都有啊,它也有这个什么。Into状语,诶,那你看啊,给一个时间between对吧。看见没对吧,基于这个时间范围去join,哎,它也可以。直接照引这个时间范围啊呃,那还有这个所谓临时的照引,就是基于这个。
02:03
施事件时间语义跟处理时间语义去做照引。对吧,啊,再下来还有一个lookup。啊,Lookup呢,一般的我们是尾表。对吧,啊讲的是维表,诶look up就关联维表。比如说你看这张尾表呢,我们先整体来看,等会儿呢,我们都会去给大家做测试啊,但这块东西我会细聊啊,这个呢,我们先粗略看一下,它呢直接连谁呀,连买circle。诶,创建一张表连买搜狗之后呢,干什么事?读取数据,直接跟我们留的表进行join引,哎,那你join的过程当中呢,他去查买S数据。查买搜数据,这个还记得之前我们说了微表呢,我可以不加载过来,直接放到买搜个里边,我也可以去关联过来,对吧,你之前说过这个事儿啊,当时我们说了h base跟这个。
03:02
My circle都可以嘛,只不过说如果我们要用买色的时候呢,在生产环境当中,你一定要用这个从库从表。大家还有印象吗?我们当时在讨论DM层放哪的问题,是不是当时我们说了像这个h base跟my circle都可以啊?还记得吗?还有没有印象,我们当时对比了好多框架呀。对吧,那这些东西呢,实际上。都可以啊,那我们这个项目当中呢,也会用到这个东西啊,当然等会儿我们写这个代码的时候呢,我们具体来看这个内容可以吧啊,他直接可以去关联啊,但是呢,那他告诉我们说look up join呢是基于这个。Processing time,基于这个处理时间临时照应的一个什么基础上?来做的,所以到时候呢,我们还得看,诶,那这个东西应该怎么去写对吧?诶得加一个处理时间啊,那为什么要有这个处理时间呢?到时候我们再跟大家去解释,因为他在数据存放的时候,它可以放状态里边,那状态呢可以保留多长时间啊,所以他要求有一个这个处理时间啊,这个到时候我们用的时候再再说啊,到后面给大家测先呢,我们就测这一套简单的。
04:21
对吧,In the drawing,正常的in the drawing or drawing啊,这是官方文档的一个说明啊,由于这个S语句呢,咱相对来说是比较熟悉的,对吧,所以呢,我们就快速过一下啊,但是具体的聊到我们有一些不太熟悉的点,我们再回过头来看这个文档,对吧。好,那咱们呢,开始动手去写这个。代码啊,写这个代码。呃,我还是在test里边去写啊,那这边呢,我们要用弗Li s专业的,所以呢,我添加一个依赖好吧,因为前面呢,我只添加了这个。
05:01
调节器啊,那我们还得有一个东西叫blink对吧?好,那我们把这个依赖添加一下啊,我还是放在这个里边啊,叫link。Table,然后B。好,那这个呢,我还是改一下这个用变量的方式来引用对吧。因为这样的话,我们就如果一旦改版本,我们就所有的内容统一都改了,对吧,统一都改了,好那这个就有了啊,因为我们要构建这个执行环境啊,所以呢,我们要添加一个这样的一个依赖啊好,那到这边来,我们先写这个弗Li circle的一个什么呢?呃,普通的in状语可以吧。另一个。零五啊。然后呢,这个。烧烤。注意。Test啊,或者就直接叫这个。
06:03
Join test对吧?这是in的状语啊,好。呃,那咱们怎么来写这个内容呢?或者说这个就不需要了吧。这样写两个分,感觉总感觉有点怪怪的啊。好,那。能量。呃,那我们来写这个内容,我们肯定还是要建两张表,对吧,那我们。这样我快速的写一下。我可以把这个代码拿过来。嗯,拿过来改一改啊。这两个我先拿过来,然后呢,他我就不需要去提取这个事件时间了啊,因为在我们的。弗林,So个创意里边可以用这个处理时间啊,不是说非得用这个实现时间啊,那我们就看一下,我就不提取这个时间戳,当然在S个里边,它可以用这个什么。
07:00
事件时间这都有对吧?啊,包括in join语,你也可以写这个方式啊,包括这个基于事件时间的一个join语也可以,对吧,它都行啊,就是说它处理时间,车电时间都行,它并不像data到STEM那边那么死,就必须得用什么。必须得用。实件时间,当时我们在官网上看到了对吧,那呃,弗林,So,这边他告诉你啊,处事件时间,处理时间都行啊都行,那我们就用处理时间呗,对吧?好,那这边呢,我们还得创建一个环境叫STEM。Table environment.create env,那我们要得到一个table en,对吧?啊,因为我们要写这个flink circle了,所以呢,你执行环境得多一个,这没毛病吧,好,那咱们这样啊,嗯,那两个流已经有了,接下来呢,我们要把两个流变成两张表吧,我们才好写对吧?好,这个是读取端口数据创建流啊,那这边呢,将。流转换为什么叫动态?
08:04
表对吧,好,那我们写一下,呃,那叫table,因为点。Time view对吧?好,那这个表呢,我们叫一个T1啊,我就用T1 t1呢用what sensor d1啊,好,再来一个这个呢,我们叫T2。然后呢,我的sensor。D。可以吧啊,咱们就叫这个名字啊,就是直接取名叫T1T2,接下来我们就可以写flink circle的join了,对吧?啊,实现Li circle。Join。啊的状语,好,那咱们怎么写呢?呃,这个很简单,Table in叫。对吧?table.query查询。呃,这样咱们呢,也不需要那么多的一个字段了,对吧,我们就t.ID。啊,然后p2.id啊,那也就是说你作为一个inner join,你两个人不一样的嘛,对吧,因为我要为了未来考虑,就是说我还要写这个level join。
09:09
Draw,那你有可能右边的数据文档,左边数据文档的对吧,所以两个ID我都写一下啊,然后T里边应该有一个VC吧。T有个VCT2呢有一个内。对吧,或者说呢,咱们这样写,把这个字段呢放在一起。对吧,T1的IDVCT2的ID name啊,最后一个TS我就不要了,最后一个TS我就不要了,可以吧啊然后呢,From。T1JOIN咱们的T2。啊二对吧,T一点。ID等于T2.id。写完了。好点XQ的对吧点。啊,当然如果说我们直接对这个表对象进行打印的话,我就不需要写那个env点了,大家还记得吗?
10:05
对吧,如果说你把这玩意儿转化为硫。啊,你转化为硫了。然后呢,你去打印去输出,你是不是要写Env.Q。还记得吗?这些东西flink circle啊,我感觉最后几天大家弗Li学的东西怎么都忘完了呢?从CP开始啊,CP啊,Flink circle是不是都不太记得了,还记得是吧,还好啊。而且这样看来,其实我们真的要做流的关联,大家是不是感觉到复林的S其实写起来更更好一点啊?对吧,S这种还是大家更能接受,就是照还是是不是更能接受S的写法呀,对吧,这个看着就舒服很多。对吧。舒服很多啊,这是所刻的造影,OK啊。
11:04
好,那这边呢,我们就。写好了对吧,写好之后呢,我们来做一个测试啊好,接下来呢,我们来去做测试啊呃,做测试呢,首先我要确保这两边都是开的好,那这个我们重新启动一下啊,重新启动一下。9999,然后呢,这边是888端口啊好,那这呢我们运行。好,那让我们呢,让他多运行一会儿对吧,还是那个问题啊嗯,行,那这个时候呢,我们再来做这个数据啊,当然这个时候跟这个八就没有关系的啊,你就不用关心了,因为我们用的是处理时间。对吧,啊跟这个就没关系了啊好1001,我先呢不输啊先不输,我先把数据准备好,然后呢,准备一个S131可以吧,好那我们先输左边,呃,注意这是一个内连接,我输左边,大家觉得会不会有数据啊。
12:02
输进去。他会不会有数据啊。他不会对吧,那你看这个光标在这儿了,绿色的在这儿对吧,它不会有数据,因为我们是一个内连接,内连接呢,就要两张表都有数据才可以。对吧,好,那我再把右边输进去,诶,他就做了一个打印对吧?嗯,添加了一条数据。10012305100131。对吧,这是我们这个数据啊,我们这个数据好,呃,那接下来他照样也是一对多的关系。那照样也是一对多的关系,什么意思呢?比如说这边我再给一个1002对吧,呃,给一个S2,然后呢,给一个八随便这个跟这个没关系啊走哎,不对,我怎么给1002的少了啊,嗯,应该给一个1001啊S2对吧。给肯定没用啊。那看它跟23.5照样能够怎么样关联上啊S2对吧,照样能关联上,同理,那如果说我在这边再来一个,呃,幺零零幺五十点五九,那我把这个数据输进去,它应该直接输出两条,大家告诉我是不是。
13:15
他是不是应该输出两条啊。啊,他应该输出两条,诶直接两条50.5 50.5跟SR31去关联的,看见没对吧,它就输出了两条数据啊,那这个呢,都是正常的,因为它是多对多的一个。关系啊,它是多对多的有关系,好呃,那我东西呢,写到这儿测到这儿为止,我们应该抓紧点功能就测完了,大家有没有想问的。就是结合我们的。那个。留的叫data stream join,大家到这块有没有什么?想问的。
14:21
有没有想问的啊,状态会不会过期?对了啊,其实。如果说你结合data STEM去聊这个问题。去想对吧,应该很自然的能会想到,那这里边的状态,它到底会不会过期呢?那现在我已经过了很久了,对吧,已经过了很久了,好,那我们再输一个数据啊,比如说还给给一个1001啊,这边呢给一个20。23码,然后呢,给一个幺零走。他照样还能关联上,看见没关联上S23等一啊,都这么久了,对吧?啊,那就目前来看,我们感觉它。没有过期啊,就算它真的会过期,时间也会很久对吧?好,那如果说大家可能想到了,如果说它不会过期,那这个东西呢,就不太好用了,因为我们作为一个旅游的draw。
15:11
那数据用完了,那肯定就应该过期,你不能说永久的在这儿保存着,这样不太合适,对吧,这第一个第二个点在于什么。如果说它会过期,那它默认的时间是多少呢?对吧,大家自然有这个疑问啊,那既然有默认时间,我们自己能不能设置时间呢?是不是对吧,我们可能会有这样的一个疑问啊,这就是学习嘛,学习的时候你把多种相同东西放一块儿,你就应该有这种疑问,你要去找对吧?好,那我告诉大家,其实他可以。啊,会过期。啊,可以设置这个时间啊,那我们看一下默认值啊,但是默认不会过期,我告诉你默认不会过期啊。在哪呢,在这设置啊,它的过去时间呢,因为我们写的不是这个啊。不是这个even time啊,In join啊,不是指定那个范围的join对吧,我们直接去join,所以呢,它的一个过去时间在哪给呢?在这给。
16:08
在这给啊table env点啊get con配置信息点get,诶那我们这个就是它的过去时间啊,这是默认的啊点so,但是呢,我们要改一下这个值,但是它一个属性对吧?好,那我们要怎么改table.get点。Set对吧,设置这个时间,比如说我把它设置成什么十秒钟可以吧。我让他呢,保留十秒钟。OK吧,注意啊,这个值呢,我们可以做一个打印。做一个打印啊,那这个呢,我们也可以看到,我们重置为十秒钟,它是一个什么样的现象,OK吧,好,那我们把这个呢,重新启动一下,这样呢,我还是一样的放这边呢。把这个重启一下,省的那个数据去。干扰对吧,啊,省的这个数据干扰啊,当然呢,我可以粘一个数据放这。
17:04
粘一个数据放着,但是呢,我先不输对吧,我不敲回车先准备着嘛,对吧,好,然后呢,我们来运行啊。哎,那默认值打印出来了,我们打印了值对吧,叫PT0S,这什么意思啊。有没有同学能把这个翻译一下,叫PT0S表示什么意思?谁来,谁能给我翻译翻译啊?啊。这个。不懂,不太懂。是吧?
18:00
PT0S。什么意思呢?Ten啊,你这个process打错了吧,是吧。Percent是你家还不是你家present?对吧。对,应该是process time processing time对吧,叫处理时间零秒。啊,处理时间零秒,但是我们想那你状态零秒有可能吗?就刚才我们测试的结果来说,它这个零代表什么意思啊。代表这个功能关闭对吧,就不会过期,能理解这个意思吧,有好多的参数是不是都这样的,你比如说里边HDFS生成滚动文件。我们不想按照时间的个数进行滚动文件,我们是不是设置为零。对吧,我们设置为零啊,当然对,呃,方总说没问题,有的参数呢设置为负一,有的呢设置为零,表示该参数为关闭状态,它不可能是零,那关了就说明它永不过期。
19:12
对吧,他永远都不会过期,所以呢,嗯,这种不太合适啊,你不过期。不对,不应该这样,你不能说不过期对吧,所以呢,我们设置了十秒钟对吧,好,那比如说。呃,我先输进去,我在十秒以内把这个输进去,他呢能关联到,那接下来呢,我们就简单的唠会嗑对吧?呃,唠两块钱的啊,那我把数据准备好啊,1001S2。对吧,S2,我还是给一个八,然后呢,我们稍微的唠会嗑,等呢过了十秒,因为我们第一次做测试的时候,其实中间时间我们可不止经过了十秒,对吧,那我们稍微的唠会嗑,哎,这会儿呢,应该已经过了十秒了。对吧,既然你过了十秒了,我再输进去,那大家觉得他还会有结果吗?
20:02
还会不会打印啊。如果刚才我们不设这个十秒,它是不是一定有结果呀,现在呢,他还会不会有结果?大家觉得现在还会不会有结果?肯定就没了吧,因为现在十秒早就过去了,对吧,好,那我们回车看。没有数据打印出来。对吧,这边。我已经输了。对吧,我已经说了他不会打印了,因为状态是会过期的。啊,状态是会过期的。对吧,啊,那当然这个两个状态呢,它都是存这个十秒钟,它都是存十秒钟,如果说你两边时间时间你想不一样,有没有办法呢?可以它底下不是有那个indo draw嘛,就是你可以给个时间范围,对吧,减多少加多少,诶用这样的方式其实也可以。对吧,啊,你可以照应个时间范围,你就用那种照应啊,你要。最好用那个处理时间啊,不是用用事件时间最好一点,对吧?啊用事件时间方式照它底下都有啊,那现在呢,我们就。
21:07
处于这个处理时间的对吧,那现在呢,又可能过了十秒了,我在这边呢,再来一个幺零零幺五十点五对吧?啊给个八。他也没有结果。他也没有结果,因为你右边的状态也已经过期了。对吧,它是完全按照这个处理时间来的,因为我们看到叫PT0秒对吧,处理时间它不是按事件时间,如果按照事件时间,咱们这个数据呢,应该在关联上,因为我们都是八对吧,都是八。啊,那肯定能关联上,但是呢,我们用的是处理时间,就是这种方式,它用的是处理时间,OK吧,好,这是我们测的一个点啊,所以呢,在我们这个弗Li s里边,它是也可以将这个数据进行一个过期处理的,OK吧。
我来说两句