00:02
好了,那我们继续往后说啊,嗯。就现在我们已经把这个数据呢,都给他这个。关联好了对吧,就我们刚刚这个关联的这个维度啊,已经给他关联好了,那这个按照我们这个图来讲的话,就是这一部分已经完成了。啊,那这个完成以后呢,接下来就是你的order detail和这个order info的一个装操作。对不对,来那看一下吧,啊,就现在我们要去做招引的话呢,我们是用两个流啊,一个是这个流。嗯,叫这个all detail的一个什么,对吧。好诶,没复制上啊,写一下吧,All detail的一个order detail的dream啊,还有一个流呢,就是我们刚刚处理好的这个叫做order in for的dim stream啊行。就现在我们需要把这两个流呢去做一个关联。啊,因为大家想啊,我们现在呢,都是从你的这个卡不卡中呢去拿数据啊,然后呢,我们这个是一个流,然后呢再去拿数据,然后呢,这个呢也是一个流,再去拿数据。
01:07
那你在我们这个代码层面的话呢,它就是两个流中的数据,但是呢,现在我们是需要把这两个流中的数据呢,给它拿出来,然后做一个关联。对吧,因为你的order info跟你的order detail他们本来就是一个,呃,就是有关系的两两两张表嘛。你的奥特几中记录的是你这个订单的一个详情数据吗?是吧,但是现在的话,我们是希望把这个每一个详情中呢,然后呢,再跟你的这个order info啊,然后呢,做一个什么关联,把它什么关联成一个更加详细的一个数据。好吧,行,那就按什么去做这个招引操作,来,我把这个注释写到这5.3双流招引啊。OK行,那这个说到这个drawing的话。应该怎么去装啊?啊,这个留的这个庄影,大家之前应该也讲过吧。
02:01
讲没讲过呀。应该讲过吧,啊,或者是你这个RDD的啊都一样啊,它都是有这个招音操作的啊行,那这个说到这个招的话,呃,我们下面去说一下这个招银的方式啊。对吧,就像我们这个平常去做这个招啊,有几种方式呢?呃,我们有这个所谓的内连接啊,对吧,就叫这个招啊,然后呢,有这个外连接。外连接啊,这个外连接的话呢,我们又分成这个左外联啊,什么右外联。对吧,左边啊左外联,然后什么右外联好右外联,然后还有什么呀,叫做这个全外联对吧,就常用的啊,常用的别的我就不多说啊。行,这个我就不问你们了啊,你们这个直接来听吧啊呃,内连接外连接啊,然后内连接呢,就是draw,然后呢,外连接的话有什么走外联,走外联我们叫做left after draw对吧。
03:04
然后右外联的话,我们叫做right after drawing好,然后全外联的话,我们叫for after drawing。啊,这东西我不知道你们还记不记得。啊行,呃,这是我们的这个招方式啊,然后呢,你不仅要知道这个有哪几种这个招引的方式,然后你还要知道这个他们在用不同这个招的时候,他们的结果有什么不一样的。就说白了,你的结果集应该是怎么取的?你应该要知道每一种招引的这个结果集的取的这个方式,然后呢,你才能够明白我目前我要使用哪一种招引方式。对吧,这就是你在这个使用装艺之前,你要去先了解的啊来那我说一下吧。呃,这个内连接它这个结果集啊,取什么呀,结果集取的是这个交集。对吧,就是就从表的角度来讲啊,我有两张表。
04:02
对不对,这是你的A表,这是你的B表,如果他们两个使用的是内连接的方式,那我最后呢,只要这一部分数据,因为这是你的交集的数据。对吧?啊,那如果说这个外连接的话呢,你就看啊,如果你用的是左外,用的是右外,或者是一个全外。那左外连接我们怎么取呢?左外连接啊,听好了,左外连接取的是什么呀?就是左表,左表的所有加这个右表的匹配啥意思呢?两张表,这是我的左表。对吧,这是我的右边,那么将来他们使用这个左外联的时候,那这里面有多少数据,我都得把它拿出来,但是这里面数据呢,我只取什么跟他能够匹配上的数据,比如说我的这一部分是能够匹配的,那我就拿出来了,如果这一部分不匹配,那我就不要了。对吧,那同样的道理,我们的这个右外联我们取什么呀,取的是右,就是左表的匹配加右表的所有啊。
05:07
是吧,先把这个规则给他搞明白啊,那你这个规则搞明白以后,大家注意啊,其实这个左和右啊,它本质上是一样的。本质上是一样的。为什么说本质上一样的,因为什么?因为你看啊A左外联右A左外联B吧。然后再把A左外联B,那跟你的B右外联A有区别吗?同学们。没有区别。对吧,你看A左外联B,那不就是A表的所有加B表的匹配吗?那我的B右外联A,不就是你A表的所有加B表的匹配吗?是不是,所以本质上他们两个没有什么区别啊。你要使用左外连接,使用右外连接,无非就是谁携带左,谁写带右的一个问题。对吧。谁谁左谁谁右啊,所以说呢,你在使用这个左外联右外联的时候,或者说呢,你对左外联右外联的这个理解,你不能仅仅局限于这个位置啊,局限于什么这个程度,你更应该想明白的时候,将来我的哪个表。
06:10
要放到左边,我的哪个表要放到右边?对吧,至于你放左放右,其实你都是要把它数据都取出来的,那么这种表我们一般会把它称之为是一个主表。当然跟你匹配的那个表应该叫做表。能听懂吧,所以说啊,大家注意你在使用这个左外联也好,或者右外联也好,你要想明白的一个事情就是谁是主表,你明白了谁是主表以后,那至于放左还是放右都一样。理解吧,放左还是放右都是一样的啊,所以说的来这个左半联好右半连啊,你要这个想清楚就是就叫什么这个,呃,分析啊,应该是要叫什么呀。呃,叫这个分析明白啊,分析清楚啊,这个主从表啊,对吧,谁是主表啊,这个主表的话,还有一个叫法啊,叫这个驱动啊,叫驱动表。
07:04
对吧,虫虫虫表主主表重表啊好,那这个虫表的话也有一个叫法啊。我们叫匹配表,就是人家会有这个不同叫法。对不对,下面这个也是一个道理啊,也是一个道理。好吧,都是一个道理啊,就分析清分,分析清楚这个主从表,你主从表明白以后,比如说我的A表示A和B啊,我分析明白了,A表示主表,那我就可以什么A左B。或者BUA,这两个结果肯定是一样的。好吧,这个应该是你们学soq的时候就应该掌握的东西,就应该能够记住的东西啊,我不知道你们现在能不能把它记得住啊,或者能不能把它理解对了啊,行,这是我们的左外联和右外联啊,然后这全外联的话,那就是两张表的所有啊,就取什么呀,应该是两张表的所有啊。
08:00
对吧,不管是A还是就是不管是你是哪张表,这两张表只要你用这个for after drawing,那它里面表我都要,它里面数据我也都要,就全所有的数据能关联成功的,不能关联成功的我都要把它取出来。听到了吧,都要把它取出来啊,OK,行。呃,那么这就是我们这个装影的方式啊,就是常用的这个装影方式,我给你这个罗列一下,好,那这个罗列出来以后呢,接下来。我们来分析一下,我们在这个层面应该使用哪一种装音方式。啊,大家这个投个票吧。好吧,投个票啊,这种这种这种这种用哪一种啊,这两个其实用一个,呃,随便哪一个都OK啊。来投一下票啊,你们觉得应该用哪一个?
09:05
啊,分析一下。有哪一个?啊,没人说话呀。有同学说用这个left。别的同学呢?啊,都是left是吧。呃,没有投别的档啊。行来,那我们就来这个分析一下啊。呃,这个地方用什么呢?大家想的是用这个left drawing啊。用这个left drawing,那你就要去说明白为什么要使用这个left,这个after drawing。那你想的就是有一个表的数据,我都要拿出来,有一个表的数据呢,呃,我这个匹配不上的,我就不要了。
10:05
对吧,好,那你要使用left的话,或者使用这个right的话,那你就得告诉我谁作为这个主表呢?谁作为那个虫表呢。啊。这个事情你就得告诉我了,对吧,谁作为主谁作为虫呢?就哪个表的数据我都要。然后呢,另外一个表的数据我们就去匹配就可以了。同学们。你想想这个事情。你这么一想,其实不对劲的啊。对吧,为什么不对劲了,你想了啊。你说我现在一个订单表,一个订单详情表。他们两个里面的数据有可能会关联不成功吗?有可能会关联不成功吗,同学们?没有可能的。
11:00
因为你订单详情表,它里面的数据一定是基于我的订单表来的。对吧,你不可能说我有一个什么订单表,对吧,我我订单里面有一个什么订单数据,但是呢,我没有详情,这是不可能的,或者说呢,我有一个什么订单详情,但这个详情的话,我不属于某个订单。有这种可能吗?没有这种可能的啊,同学们。所以说啊,他们两个一定都是可以关联成功的,就这两个表中的数据一定都可以关联成功。明白吧,一定都可以关联成功,那么既然我能够保证你的数据一定都能够关联成功的话,那我就没必要去分什么。左右了。反正你都能关联成功,那我什么直接这个装引不就完事了吗?取交集吗?你们,既然你们都能给练成功,那我一定是有交集的,那我就取交集就完事了呗。对吧。或者说呢啊,你用这个left right也也都可以啊,反正你都能关联成功,那那最终的结果肯定都是一样的。能明白吧,同学们啊,说来分析一下啊,就是呃,正常情况下就order info啊,就是order info表和表中的数据和这个order detail表中的数据一定能关联成功。
12:22
对吧,一定能关联成功,如果说你关联不成功,那你的数据有问题啊。就我刚刚说过的,你说我有一个订单表的数据,但这个订单表的数据,他没有这个订单详情,那你说你这个订单你买了个啥玩意儿。你买了个寂寞呀。不可能吧,或者说我有一个什么订单详情的数据,但这个订单详情的不属于某一个订单。那更不可能了,你都没下过订单,你怎么来的订单详情呢?是吧,所以说从这个角度来讲啊,它的数据一定是能够关联成功的,那如果说我敢确保你的数据能够关联成功,那我就可以放心大胆的去使用什么join这个内连接啊,当然外连接也可以啊。结果其实是一样的。对吧。
13:00
啊,说这个地方啊,我刚刚问大家说用哪一个啊,如果说你能够把这个事情想明白的话呢,其实就不不必要纠结,随便哪个都能用。对吧,啊,那个都能用啊,行,但是啊。这是从你的数据库层面说的,对吧,就是我从我的数据库层面,你看了哈,我数据库里面,呃,我把它拿过来,来我的数据库里面,我有这个订单的什么呀,Order info表,有这个order detail表,就这两个表里面的数据绝对能够关联成功。能听懂吧,绝对是能够什么关联成功的,你比方说啊,我的呃呃呃,这个不掩饰了吧,啊,就是他两个一定能够什么关联成功,Out detail和这个out info,好,但这个从数据库层面的,你放到这个流里面呢,它就不一定了。为什么不一定呢?啊,来,我给大家去演示这个问题啊。看好了啊,那我现在我想去做这个招引,比如说我现在就计划使用这个内连接去做招引,因为我分析了啊,他们两个一定能关联成功,那我就敢用这个招引去做对吧?好,那我就想用装易去做了啊,那我装印的话你看了哈,我现在首先第一个问题,我能调到这个装吗?
14:14
来,同学们。我能钓到这个装鱼吗?你钓不着。好吧,啊,首先第一个问题就是这个你根本就调不到这个噪音操作啊,这这这这这个你是解决的啊,那这个为什么调不到噪音操作呢?其实也很简单啊,这个我就不卖关子了啊,直接告诉你,你在你这个数据库中,比如说你这两个表要去做招引,对吧?来我们写一个招引操作。呃,新建一个查询编辑器,你看我写一个专一操作啊,啊,这有一个是吧,就有一个来这个怎么写啊。来这个怎么写呀,我要什么,从什么呀,从什么呀,从你的。大一点啊,从你的order info这个表中查数据。
15:01
对吧,Order if这个表查数据。是吧,然后取个名名叫oy吧,然后呢,他要去join数据,比如说我要join上什么招,上这个all detail。对吧,叫OD,然后他们两个on什么on OI的注意啊,你在做表关联的时候,你的两个表之间关联一定有一个关联字段对不对,就是你的这个字段要跟人家的哪个字段去做关联。是这样的吧,好,那比如说我们的order in for的话,一定是拿他的ID跟什么呀,是不是跟你order detail的哪个字段呀,注意啊,你order in for。诶,看好了啊,你order info里面肯定有一个all ID,然后呢,你的这个all detail中来order detail。我把它拿过来啊,你的order detail中一定是有一个字段能够什么跟我的order info关联的,如果说你不能关联的,这个事就说不通了。哪个字段呢?你的order detail detail中一定会记入我的order ID。他们两个就是一个关联字段对吧,所以说这段我怎么写呢,我就这么去写,你看啊,就是我order info中的ID,我要跟什么,跟你的order detail中的叫做order ID做这个关联。
16:12
对吧,上面就是查了查的话,那我就什么直接什么谁来个星吧。差。所有的。OK吧,来关联一下,走一下,这就是我这个关联好的数据。能看明白吧,这是我关联好的数据。好,那你既然你这个表层面,你在做关联的时候,你都得有一个关联字段,那你说我放到我这个流层面,你说我这两个流要去做关联了,他哪知道我拿什么字段跟你去做关联啊。你这个东西不得告诉我呀。对吧。好,那这个问题如果你能够想明白的话,为什么他调不到这个方法呢?因为你现在这种流里面就根本没有办法去做这个招引操作,他不知道怎么去做招引。那话说回来就是怎么就能够做招了呢?应该你的流必须是KV格式的数据才可以做招,你是KV格式的,它也是KV格式的,我的K与K之间,我才能够什么去做这个音操作。
17:06
理解了吧,好,所以说呢,你想做招音之前,那你要先完成这个功能,什么功能呢。就是先干嘛呀,先把数据结构做一个转换啊,我们要做转一个数据结构的,怎么转呢?那你给我传过来的是一个order info,好,那我给你转成什么呀,转成一个top呗,对吧,Key啊,注意这个order in for出谁呢?出哪个字段,出的是I字段,那我就什么order in for。Order info的这个ID字段,把它作为key value呢?还是我的order info数据看到了吧,这个叫order info k的一个stream。OK吧?来下面这些转换啊,叫什么叫这个map操作,他给我一个auto detail。All detail,然后呢,他出哪个字段呢?那all detail肯定出的是你的order detail里面的这个all ID这个字段吧,对吧,然后呢,Order detail。
18:06
好,这是我的detail的一个K的一个什么dream。然后了吧。啊,你只有做成这种效果以后,你看啊,接下来我的order info。找K的。Re。对不对啊ST啊。是吧,这个时候你再调draw调到了吧。刚刚你根本调不到啊,现在才可以调得到好,那后面你就什么直接写呗,写谁啊就写一个什么detail。Order detail k的一个stream OK,这就关联好了,关联好以后这是我们的order join的一个stream,好,那我们就先不着急,先不着急往后写了啊,那你关联成功以后呢,来我先打印一下。呃,什么打印啊,All drawing dream.print好,我先做一个打印啊,我们先看看这个效果吧,啊,同学们来跑起来啊,呃,把这个重新启动一下,就我们先看看它能不能装新成功啊。
19:28
好,启动起来了,启动起来以后呢,我们来跑一把数据啊,我们就直接跑一波数据,那你这个数据跑完以后呢,对于我这个数据库里面的数据来讲,听完了同学们,对于我当前这个数据库里面数据来讲,你能够关联成功多少条数据,那我的流中也应该能够关联成功多少条数据,对吧,那我们看一下啊,这个数据已经跑完了啊。跑完以后呢,我们来刷新一下,呃,刷它干嘛呀,就直接执行这个啊。呃,诶执行一下啊好,执行完成以后,大家注意啊,这就是我关联好的数据啊,然后呢吧,关联好的数据。
20:01
是不是他呀,我选到执行了吧。好没问题啊,关联好了数据,然后呢,下面看一下吧,它总共有36行数据,OK,来这个时候我们回到我们这个代码中。这是我关联好的数据啊,我们选中圈一下,看看多少的数据啊。是不是36行啊,然后你看一下啊,这个关联好以后,你看这就是他们的关联字段啊,你看这是我的order info,然后再往后。二了几条?对吧,这不就把你两个流里面数据给他关联过来了吗?而且你看一下你数据库里面是36,然后呢。我的这里面。对吧,正好也是36。你看这个数据不是很完美吗?是不是啊,就是你目前看到的这个结果还是很完美的,但其实大家注意它是有问题的。好吧,那有什么问题呢?我们接下来来去做一个分析啊,行,先说到这儿啊。
我来说两句