00:00
OK啊,那我们就开始实现我们这个双流招引的这个就是数据延迟问题啊,把它这个解决掉,行,那就按照我们这个的方案来去做了啊,首先我们要这么去做。呃,你拿到这个数据以后啊。就你拿到这个数据以后,你要先明白啊,它这个数据长什么样子能理解吧,呃,前面是我们这个关联的那个字段啊,这个字段无所谓啊。主要是看后面,这个后面是啥意思呢?啊,这个option它表示的就是。可有可无,对不对。有可能有,我可能没有,那就说白了啊,它里面这个outo可能是有对吧,可能是没有,那么同样它也是可能是有,可能是没有,所以说我们就要什么对你的数据呢,去做什么判断啊,看看你们到底有还是没有。对吧,看看你们有还是没有啊,来,那我们就把这个写一下,呃,现在我们,呃对数据的处理的话,我们还先不着急去写ES啊,所以说我们现在还不用那个行动啊,那我们还是转换吧,来怎么做呢?就是拿上你的order join,好order join这个stream啊呃,既然你要做转换,然后这个转换的话,我们在这个过程中会涉及到去到缓存里面去写,到缓存中去读,对吧,那我们就什么直接使用map parts了。
01:21
能理解吧,使用这个map partitions啊,OK,行,他给我传过来的是什么东西呢?是这个啊,那我就。呃,我想想这个怎么写啊。这个我直接写这个吧。写模式匹配吧,好吧,模式匹配会好写,好写一点啊,Kiss什么呀,你看啊,他传过来的应该是一个前面是我们的K啊,就是就是你们那个关联字段啊,然后后面是我们的叫order info的一个op,就是那个option啊,就是order detail的一个op。对吧。
02:04
看看对不对啊。对着呢啊,现在是没有什么,没有这个结果给他返回回去是吧,呃,那我看看啊,诶不对啊,这个map part不对啊,他给我的是那个啥啊,他给我的是一个迭代器是不是。写错了啊,写错了啊,写着急了,他用的是个迭代器,对吧,上面迭代器啊,那我就呃,就来个迭代器吧,这个迭代器的话我们怎么写,嗯。我想想啊,这个怎么写啊,呃,取个名字啊,取个名字。呃,叫啥名字呀,叫order庄的这个it吧。这个能写吧,啊这它啊,然后再去迭代它啊,Out join的这个it t讲这个点for啊,这么来去迭代啊,行,那这个for的时候呢,这个地方我就可以写这个模式匹配了,对吧,前面是你的key啊,后面是找order in for的这个op啊,后面是这个order detail的这个op啊好把这个括起来。
03:08
对吧,这样去写啊。小心啊,能看懂吧,就是把它这个挨个迭代出来,迭代出来以后它肯定是这个格式的哈。对不对啊,然后呢,最后我们需要给大家返回东西啊,呃,那这个返回的话我想想啊,因为我们是map爬梯时,那最后给他返回的也是一个迭代器,那我就这样吧,那我们这样哈,就是我们,呃,我们拿拿一个集合吧,拿个集合啊,这个集合就是专门去维护我们这个招后的数据的啊,就你的每个批次我招以后的数据啊,呃,那我们来一个。我们招引完成以后的结果应该是我们的,我看看啊,我们要计划把它处理成什么来着,是不是处理成一个old呀。对吧,昨天让大家看过这个图哈。
04:01
看一下就是我们正常这个装易成功以后,就要什么,把它这个关联成一个什么out啊,然后呢,或者说看我们的这个图呃。在这对吧,就把他们两个什么关联成一个什么,这个auto就是什么一个什么订单宽表。对吧,啊,那我们就呃这样去处理啊,就是你们装易成功以后呢,我给你返回就是一个out we的一个什么订单,Out的一个什么这个集合啊,那我还得什么先去准备一个,准备一个并对象啊。来,我把它这个扭出来啊呃,扭上一个。SKY类啊好,这个先放到这啊,因为我要不不好去定义啊,来我们把这个写一下,叫order订单宽表啊。好加进去啊,然后呢,这是kiss,呃,那后面的话呢,就是我们需要什么这个字段了啊来这个我就直接从文档中去复制了啊,不再去写了。来all we all we在这啊呃,它这个就比较多了哈。
05:01
他这个是什么,相当于把你的这个order info和什么order detail,然后呢,全部都什么整合到了一起,上面这个是你的detail,上面这是我的order info,然后呢,这是我的补充的什么各种维度数据。对吧,好,那就相当于将来我们需要干嘛呢?需要把你的呃,Order detail的数据呢给它拷贝进来,对吧,把这个order info数据呢给它拷贝进来,这样我就什么组合成了一个什么out。能听懂吧,啊,那我们为了这个好去实现这个对象的这个拷贝啊,然后呢,我们再去加两个方法。这个方法啊,就是你将来直接什么,直接去调这个方法就可以了啊。好,复制过来就是我已经封装好了啊,直接去用就行了,给大家去解释一下。首先你看了哈,我们定义了一个什么构造器啊,这个构造器的话呢,我支持你去传上一个order info,传上一个order detail就说白了啊,你创建我这个order的时候呢,我可以支持你传一个order info过来,传一个order detail过来,因为你们两个组合起来不就是我的order we吗?好,那这里面的话,我们调了什么墨GE,墨GE就是说白了,我要把你的order info呢合并进来,把你的order detail也合并,合并过来,那你看一下啊,我们在墨这个order info的时候判断一下,如果说你的order info不为空,那你看还是使用我的这个工具类,然后呢,我们调用一个什么copy proper,是不是把你的order info拷贝到我的当前对象里面。
06:21
对吧,然后呢,呃,因为这里面有一个不一样的点啊,就是我们在这个order info里面。注意啊,凹O里面我们的订单的ID呢,这个字段我就叫ID,但是你到了这个宽标里面以后,它会有很多ID,所以说我们把这个订单的ID呢,我们叫成了。订单的ID啊,我们教程了这个,呃,啊,在这叫成一个什么叫做凹的ID。然后呢吧。就是换了个名字啊,所以说你看啊,我们专门做了这个事情,就是把你的order info里面的ID专门取出来,然后呢,复制给他,因为你们的字段是不一样的。对吧,所以说呢,我的这个拷贝工具类的拷贝呢,它就什么拷贝不成功,因为它的拷贝是要基于你的这个相同字段去拷贝的。
07:03
所以说你要把这个字段呢,当做负个值,那同样啊,下面就是我们去合并你的out detail,那你这个和这个out detail的时候也是一个道理,先判断一下,判断一下你不为空,然后呢,把你的东西呢,拷贝到我的这个对象里面,接下来也是在这个all detail里面,它的这个ID呢,就叫这个ID,但实际上到了我们这个里面以后呢,它叫这个名字,它叫做detail的ID。那这个你的对象拷贝也完成不了,所以说我们需要什么单独复个值啊,就是把你的auto detail里面的什么呀ID取出来,然后给到我的刚才对象的这个detail ID上面。就说白了啊,我们专门去处理这两个什么ID字段啊,因为你不能都叫ID啊,你在这个里面如果说有两个字段都叫ID,这肯定行不通是不是,所以你叫什么通过名字来去区分,那你要通过名字来区分的话呢,你就对应不起来我们这个原对象的这个字段。是吧,那你的这个拷贝工具类呢,你就搞不定这个事儿,那你只能是什么手动的去把它整负个值。
08:04
好吧,来这就有了啊,这个有了以后,接下来回到这里面,我们就可以去声明了啊,你看一下我声明一个结果。嗯,还是类buffer吧,对吧,类buffer,然后呢,这里面我放的是这个啊澳外就是你的订单宽表啊。好接收回来啊,OK,行,那最后的话,我就想着说把我们呃,整个这个数据呢,都给他什么扔到一个集合中,然后呢,再给他返回回去,那你看那我就可以在这个在这个的地方,我就返回一个什么old wide的一个行,这就解决好了。对吧,就相当于我们把所有这个装易成功的数据呢,都给它扔到我的这个订单宽表中啊,扔扔到这个什么这个out这个集合中啊,不是订单宽表是吧。能理解吧,行,那么接下来啊,在这个for循环中呢,就是我们对这个数据的一个处理,好,那我们处理的话,我们要分这么几步去处理啊,首先啊,大家想想,我们现在主要就是判断一下你的它有没有,它有没有对不对,那你想想啊,我们使用了这个four of the drawing以后,我们最后有几种情况呀,就对他们来讲,就是有还是没有,最后有几种情况。
09:24
啊,同学们有几种情况。这个应该有三种情况,哪三种情况呢?来给大家去说一下啊。就是呃,那我们就把这个order info呢,作为我这个主表啊,或者说这个就是order info order info有,然后呢,Order detail有对吧,这是一种情况,还有情况就是order info有但是。DT,没有。呃,这个能听懂吧,同学们。啊,那么再来一种情况就是。
10:02
Order info没有,但是呢,Order有。对吧,那肯定不能说这个都没有吧,你都没有你那你结果就就就不可能不可能再出现在我这结果集中对不对,你不能说两个都是空吧,那你关联个啥呀。对吧,这两个都为空,这是不可能的啊行,我们总共有三种情况,那有三种情况的话,我们就把它,呃,就以它来为主啊,就我们先判断它,就是我们假设你都有的情况下,我看看这两种情况,我应该怎么去做这个处理。能明白吧,来说接下来我们就可以写代码了啊,怎么写呢?判断如果说啊,看好了啊,你的order info op。Order info这个op对吧,它是什么呀?你不能这么判断哈,不能这么判断明白吧,这么判断是不行的啊,因为它一定是一个对象,这个option,因为它本身option,它就是一个对象,我们说的有没有呢?是你里面的这个order in for,或者这个order detail有没有,它一定是有有个对象的啊,所以你不能这么去判断啊,那你要知道,如果说。
11:09
它里面所包含的这个内容,如果没有的情况下,那么其实这个option的话,它就是一个值,这个值叫做no,那。对吧,来,那你看一下啊,这个option下面有两个13类啊,一个是那一个是这个some some就表示它里面是有东西的,这个那表示它里面就没有东西。所以说你这句话怎么判断,你要这么去判断啊。来把它最小化到怎么判断呢?就是不等于no,那你得这么去判断。对吧,当然他说让我去优化,优化成什么,优化成这个叫做什么is DeFine。看到了吧,他说你可以通过这个来去替换啊,都可以啊,你就自己去看啊,那如果你要优化的话,就是点什么A。对吧,就表示什么,表示它是什么定义的,能看到吧。就是飞空啊,你这个挨个去看吧,飞空对吧。
12:00
能看到吧,同学们好行,那你这个判断完成以后,就表示什么,表示我的order info是有的,那么你order info有的情况下,那我就可以什么放心大胆的什么取出order info啊取出好取出这个什么order info怎么取出呢?你要从这个op里面把它拿出来啊来我们拿一下就是all info。在这啊,这样直接get就可以了啊好,这就是我的order info。然后呢吧,好,那我取出来以后呢,那我还得看什么呀,我得还看你这个凹凹detail跳有没有啊,所以这个地方我们要判断什么,判断你的凹detail跳有没有。对吧,来判断啊,这是我们if好了,If就是你的all detail。Op。好,如果说它也是这个is DeFine,好,那么这种情况下。
13:00
听好了,这种情况就是什么?就是你的order for you,你的order detail呢,也有。对吧,那如果说他也有的情况下,那就很简单了呀,那我就什么放心大胆的取出啊来取出取出这个奥跳。对吧,怎么取呢?那就是all detail op get,好,这是我的all detail,那你看一下吧,你的order info也有,你的order detail也有,那么这种情况下,我就可以把它们两个组合到一起了啊,就是你关联成功了对不对,那我就什么组合成来组合成就是什么组装成啊组装成。这个order we怎么组装的?那就new上一个order we,然后呢,New的时候,这里面你可把你的order传进去,把你的order detail传进去,这就OK了,这就是我关联好的一条数据。然后了吧,这就是我关联好一条数据,OK,那你关联好这条数据以后呢,你把它什么这个放入到结果中啊,放入到这个结果中,结果集中吧,好怎么放呢?那不就是order we。
14:04
对吧,点openend把你的扔进去。能看懂吗,同学们?Okay。行,那这个是我们叫做order in for you order detail也有,你看了哈,假如说我们的order for you order detail没有的时候,什么样没有呢?就是你看它else。对不对。Else就表示他没有,那你没有的情况下,你要做什么呀。大家想想啊,就是它是有的,但是它是没有的,就说明什么,说明现在就是我的order info是有数据的,但是我的order detail是没有,那就说明我现在他们是没有关联成功的一个状态,那按照我们刚刚的分析啊,如果说你的order info啊,跟什么,跟这个order detail是没有关联成功的一个状态,他要干嘛来着。他是不是首先要写缓存,然后呢,其实他还要去查缓存吧,同学们。
15:01
对吧,所以说啊,大家注意这个。呃。我想想啊,那我们还不能用L。因为什么,因为你这个不管,不管他这个能不能跟他关联成功,对于这个order info来讲,他都得去写缓存,他都得去查缓存,这个事情是必须要去做的,因为他要他是可以什么跟这个auto detail关联多次的。所以说你就不能说因为我的同批次,我关联成功了一次了,就决定我要做什么,什么操作,这是决定不了的,你甭管你的同批次能不能关联成功,对于你的order info来讲,他都得去查缓存,都得去写缓存。能理解吧,因为它是可以什么跟out detail跳关联成功多次的,好吧,所以说你看了啊,那我就取出来什么这个取出来这个out info,然后接下来就是,呃,不是取出来就是把它关联成功啊,这是他们都有的情况下关联成功,那如果说。这个order for order detail没有的情况下。对吧,就放到这儿了。啊,这种情况下我要干什么事情呢,就是呃。
16:05
我想想啊,这个写缓存吧,呃,其实这个有没有啊,就他有没有你都得写缓存啊,都得写缓存啊,呃,那我想想啊,嗯。写在上面啊,来先缓存。对吧,就是你的order info写缓存。然后呢,你的order order info写缓存,然后呢,你的这个呃,Order info还是读缓存是吧,是这个意思吧,同学们就是你没有关联成功呗。对吧,你关联成功的,你看是一个数据直接就走了啊,然后呢,你没有关联成功的啊,那没有关联成功的话,那确实是这种情况吧。嗯,啊,确实这种情况哈。呃,但是呢,呃,这这这哎呀这话这句话应该怎么说呢?因为我怕给大家造成一个误解啊,就是对于这个order info来讲哈,他不管不管你的这个order detail有还是没有,我都要去,都要去这个写缓存。
17:05
也要去读缓存的啊。啊,只要你order info有,我现在怎么写啊比较合适啊。呃,Order in for you,然后呢,Order detail也有,那我就做这个操作对吧。做这个操作,然后呢,接下来就是我的order info是有的。然后呢,那就只能表示你的out detail跳没有了,这个操作就做完了,做完以后那我就啊行吧,就放到这吧,就放到这吧,好吧,这样也能说得通啊,也能说得通啊,反正就是你还要再去做两件事,一个是你要去把自己能写到这个缓存中啊,再一个是要什么去读这个缓存。能明白吧啊,去读缓存啊行呃,先停一下吧,啊,因为这个还得写半天啊停一下。
我来说两句