00:00
呃,首先呢,咱们还是快速的把前面所讲的内容呢,做一个回顾,对吧,那我们刚开始呢,是聊到9.4这个需求啊,它呢是属于交易。文件大了不少,因为加了图了啊,加了一些图解啊。嗯。那我们是聊这个。9.4,那这一点呢,是属于交易,当然它都是业务数据的。对吧,那我们就联想到在我们离线输仓里边儿,关于这个业务数据这边,也就或者说我们交易这边,对吧,我们DWD层所做的一些事情,那首先呢,呃,维度退化。我们做了一个事儿。对吧?啊,那在离线收仓里边,我们是直接将这个被DC这张表呢,你并没有去给它独立创建一个微表,而是说把它倒过来以后,生成这个实时表的同时,我就把这个base DC表信息呢给它。
01:02
直接通过状元的方式给它加到我们的。事实表里边儿。对吧,啊,那这个就涉及到我们要做这个。Join或者说呢,你要在过程当中去查询买S的表,对吧,其实我们想一下啊,这个地方咱们如果不用join的方式,我们能不能实现这个功能,其实也可以,对吧?那怎么做呢?就是说知识表数据来了,那我用一个map函数。每张数据我根据ID,我写一个circle,去查买circle里的数据,然后把这个信息补充到我们的。事实表里边是不是也可以啊。大家能明白这个意思吧,对吧,哎,它也是可以的。啊啊,但是呢,我们还是习惯可能想着,诶,那我们用这个状语的方式应该怎么写呢?对吧,那不光是这个点啊,那这后面呢,咱们还有。啊,咱们还有还有呢,就是说在我们计算这个业务实时表的时候。
02:04
有一些需求呢,它是需要将多张实时表进行一个。关联。对吧,要把多张事实表进行关联,那你事实表进行关联的时候,你就没办法用map这个方式了,就刚才我们说了,你就关联为表,它的数据呢是死的,但是不变,对吧,那你呢,就可以去读买S数据,写一个GDBC啊,但是如果是两个流。啊,如果是两个流。关联,那你没办法,你只能用join引的方式,而且双流join引对吧,所以呢,我们。头一天就给它扩展了,首先第一个是data stream API。对吧,留预留的一个join。那我们当然看到了,有window join,有JOIN2种,对吧?那window draw呢,其实不适合我们的场景啊,也没写测试了,当然这个呢,你也可以自己去玩一玩,这个倒还好,对吧,你可以自己测一测啊,呃,当我们选用的Val draw。
03:03
啊,但是join呢,它其实有缺陷,第一它只能用于这个事件时间,对吧?啊,那么第二个呢,嗯,在于。它只有这个内链接。啊,如果说你想做这个全外连接,你要自己写代码非常麻烦啊,不是说不能实现。对吧,你想想看那个。弗林格斯克那边。啊,它都实现了。那凭什么data stream这边实现不了,那肯定也能实现,对吧,就很麻烦,你要自己写,他并没有封装这种操作,他没有说呃调for joining对吧,它没有封装这种操作啊,所以呢,我们要自己写。啊,就会比较麻烦。你要用什么呢?用connect加这个状态编程的方式去做到这个事情才可以啊好,这是我们扫描第一个,所以呢,我们就扩展了data STEM的一个。Draw的一个代码,我们并做了测试,对吧,但是它有缺陷,所以接下来呢,我们又聊了一个事情,就是弗Li s的join,当然我们测了有这个。
04:08
In join left join right join跟for join这些东西呢,都测了啊,同时呢,我们也聊了一下它的一个状态的存储问题,对吧,比如说。In the join,那么in the join呢?他是。什么样子,两边无论是左表还是右表,它都是创建,就是我们所说的状态的时间T点的更新,对吧,它都是什么。Create and write。对吧,创建或者说被修改了就写操作嘛,对吧,它会更新啊,那如果是左边链接,左边是主表,左边单独来数据呢。他就可以出,我们大家看到了,如果说在规定的时间内,你右边来的数据,他就把刚才那条数据呢,做一个撤回操作。对吧,他就会做一个撤回操作。
05:01
啊,那么之后。就是嘛。重新写一条关联上的数据对吧,所以当你左边先来数据,右边数据在规定时间内到,就是这种情况。对吧,那如果在规定时间内没到呢。我在我假如说我给他十秒,我左边来数据,我在11秒以后。才有结果。才来右边的数据,那就不会有结果出现,对吧,因为左边的数据已经被删了啊,当然,呃,状态呢,保存十秒钟,我们自己给的,你肯定要给个时间,但如果说。左边的这个状态一直被堵,那么它将不会过期。啊,一直被读佳佳不会过去,当然这个所谓的一直被读啊,你读与读之间呢,间隔时间不能超过。超那个状态的TTL时间对吧,假如你给他十秒,就是你在右边输数据的时候,你十秒不要到十秒间隔,你就输一条数据,那么那样它就不会过期对吧?那如果说你右边停了,停了有十秒,那照样它还是会。
06:14
过气对吧,它还是会过期,是这个意思,OK吧,好,这是我们所说的这个。他的一个join,那这个点呢,在面试的时候,之前就有同学被问到很细。对吧,就是我们所测的那些点,他基本上都问到了,他说呃,这个状态能不能给时间,对吧?T点能不能给,能给怎么给,对吧,这是第一个,第二个如果给了时间,那我正常的in the drawing它是什么现象,那如果我用的是这个左外连接。那我左边先输数据对吧,那右边的数据在规定时间内来了,它是什么现象,如果说在规定时间内没来,他又是什么现象,他就会问的很细,之前就有学生被问到这个问题。
07:00
你懂吧,啊,所以后来呢,我就把这个测的特别细,给大家去聊清楚这个事儿。啊,因为之前有学生被问到了,就很细,他就是可得问对吧,他说在规定时间内来了是什么现象,如果说在你状态过去以后来了又是什么现象,对吧?他可能还举这个,呃,全外连接的例子,对吧?那全外连接在规定时间内来了怎么办?在规定时间之外来的数据又打印什么结果?啊,他会问的很细很细啊,OK了,这个大家一定要注意一下啊,就是说我把这个测了,所以呢,希望大家呢自己去测一下,应该都能测了,因为你前一天呢,我们没讲太多东西,对吧,而且呢,又是一个呃,周四,所以呢大家应该都能够去测好啊呃,这个基础上呢,我们又讲了一个,这是在弗林里边最普通的那种。Draw方式对吧?啊,那在这个基础上呢,我们又讲了一个lookup draw。
08:00
关联为表的作用。对吧,也就是说你正常的一个理由,然后呢,你可以直接通过JDBC关联一张MY的表。对吧,关联一张my soccer的表。啊,那在这个时候。咱们可以直接拿着留跟这张。表进行一个关联啊,同时呢,我们还测了它其实在。为表,Lookup表当中呢,可以设置一个catch,两个参数,一个最大的行数,一个时间。对吧,而且通过测试发现。那我们这两个参数呢,必须要同时给,你要给一个他会报错对吧,他说了要不然呢你就都要,要不然呢都不要。就必须两个同时给。对吧,好,那但是呢,我们发现一旦我们加了这个缓存,它其实数据呢,呃,会有误差。
09:02
啊,它的数据呢,会有这个误差。对吧,啊,因为我们发现他是这样的,他在。缓存当中如果能读到这个数据,他就不会去。查询买色了,那如果说我缓存当中有了,你再去改了买色,那这个数据呢,就会不一致,对吧,所以当然我们说了,那你要想加catch,你用场景对吧,是什么呢?第一。微表它不会变。对吧,你的这个lookup表它未来呢,它不会变啊,这个当然可以,那你不会变,你只会新增,那没有问题,对吧,或者说呢,你由于我们这种表变化的频率不大对吧,你对于这个要求精准度的要求不高。假如说那我们如果出现这种。两边数据不一致,那你事实表这边关联的维表信息,那就关联的是什么。
10:00
关联的就是。老的数据吧,啊,如果说你对于这个要求不高。那么也可以用catch,因为它可以加速查询,直接从你本地的去读,对吧,从你程序当中它缓存了一份。那如果说你没有这个缓存,假如说你没有设置参数,他们每一条他都会直接去找这个MYSQL。那如果你是时表的数据量特别大,那你买S这边压力会很大,对吧,这是第一个,第二个呢,你每次查买S,那查买S肯定没有从我本地查快吧。大家想是不是肯定没有从本地查快?啊,那基于这种情况呢,你肯定效率会受到一些影响啊,就是说你用开始呢效率会高,但是呢,如果说你未来会有修改的操作。对吧,会有修改的操作,那么。你一定要注意。啊,这个影响会不会影响到你未来的业务。
11:00
对吧,如果没有修改操作当然没有问题啊,好,这是我们头一天给大家所聊的全部的内容啊,大家呢,我相信大家也都测完了,早上也问了对吧啊,大家扣的都是一啊,都测了没有问题啊。
我来说两句