00:00
好,同学们来,接下来我们就开始去做这个分流的工作啊,那我们就回到这把它注释掉来,第二步就是分流了啊呃,这个分流的话呢,我们就最终把数据呢,就是什么直接写到你的卡夫卡,或者写到你的这个呃red了,对吧,所以说这一次我们应该用的是一个行动算子啊,那我们就直接什么加上OB勾叫什么呀,直接for r DD呗,对吧,这没得想for r DD啊,然后呢,这个RDD,那你给我一个RDD,那你说我RDD用什么呀,同学们。啊,这里面怎么写呀,是不是得for或者for partition了吧,那结合上我们之前的一个使用经验来讲,这个地方是不是直接就for partition了呀。对吧,这个肯定会更好一点的啊像呃,Forage part,然后接下来就是我们的他给我们传过来的是一个你的战object,一个迭代器对象啊对吧,迭代器对象好,那我就什么呀,JA object.for我去迭代一下,那现在我拿到的不就是每一个JA object对象吗。
01:01
对吧,那从这开始,我们就开始什么做你的这个分流工作,能明白了吧?开始做分流工作啊,好行,那如果你要做这个分流工作的话,那你首先得先去明确一下,就是我们Maxwell给你采集到的数据,它的格式是什么样子的来正好呢,我们刚刚是不是测试过一波数据啊,那我就随便拿一个吧。对吧,随便拿一个数据过来啊好,这个CTRLC一下。来还是通过我们的。呃,诶,这个不用火狐吧,我们。用这个啊。好,通过这个浏览器打开啊,来我们访问一下那个搜索一下啊。好。OK,过来啊好,过来以后呢,我就把它放到这格式化一下,行看一下吧,呃,这个就是我们Maxwell给我们采过来的数据。
02:01
能理解吧,好,那你仔细来看一下,这里面都包含什么东西啊,首先第一个是在这个整个加生里面啊,它包含一个database,就告诉你当前我采的是哪一个库的啊,那其实这个信息对于对于我们来讲啊,对于我们现在来讲其实没有什么价值。因为我们现在就采了一个库,就是这个整面尔库,对吧,你也不可能踩别的库,那如果说呃,你配的那个时候,就是mace所监控的库是比较多的,比如说有各种各样的库,好,那这个东西还是很有价值的,因为你的数据过来以后,你起码得判断你是来自于哪个库的数据。对吧,好,但现在来讲的话,这个其实对于我们来讲,呃,作用不是很大,好吧,行呃,那我们主要想关心的是这么几个啊同学们。首先,Data一定是我们最想要关心的,这里面就是我们改变完以后的数据。对吧,昨天我们不是说这个b logg吗?同学们啊,B logg我们现在配的是肉,肉是什么呀?肉就是记录你这个改变以后的结果,好,那我告诉你,这就是我们采集到的它所记录下来的改变以后的结果。那就说白了,这就是我们。
03:07
最终的结果。对吧,他就把这个数据给你拿过来了啊,说这个应该就是我们最终想要的结果,我要把它呢,写到什么呀,是不是写到我的下一程中啊。能听懂我的意思吧,啊,把它写到我的下一层啊,行,然后呢,呃,你光知道数据也不行,你得知道它是属于哪个表的啊,所以你看这里面就会有。表明。对吧,这个table也很关键啊,这就是告诉你,诶,我是采集的哪一个表的数据,你看现在是一个什么user info是吧?诶user侧info啊好,那除了这个之外,还有一个也是比较关键的啊,就是我们昨天。昨天这个,呃,上课给大家去说到的啊,这个东西。Type,这个type是干嘛的呢?啊,听我讲,这个表示的是你数据的一个操作类型,就说白了,我的这个数据变成了这个样子,是怎么来的,是你新插入进来的数据。
04:03
还是说我经过修改以后,我变成了这个数据的啊,你比如说我现在给你做一个简单的测试啊,同学们,这个是我们新增的一个数据啊,新增的一个数据。好,他用的是一个insert,然后你看接下来啊,我要做一个操作我的任务呢,现在还在启动的,对不对,我把它清理掉,清理掉以后呢,我现在呀。打开我的这个搜Q要工具啊,我做一个小小的一个调整啊,你看了啊,来找到我的这个库,找到库以后打开表,打开表以后呢,呃,那就还是user info吧,好吧,User info来打开。打开以后啊,你看啊,我现在随便找个人啊,找个叫啥呀。叫数数好吧,来,我把这个数数的名字呢改成123123。然后呢?好,我把它改了以后,那这个改动就会被你的Maxwell监控到,监控到以后呢,数据呢就能够。发到卡不卡,我就能够把它消费出来,来,我把它拿过来,这就是我消费出来的数据啊,那你消费出来以后你再来看啊同学们。
05:06
格式化一下,好,大家来看这个类型变成了什么类型,变成了update类型,而你刚才那个是一个新增的对不对,因为刚刚我们是重新生成的数据啊,说它是为什么会这个做一个新增操作,对吧?而我这个做了修改的操作,你看一下不就是一个update了吗?而且要注意啊,如果你做的是一个修改操作的情况下,听好了,你做的是一个修改的操作情况下,我们的数据也是在data里面放的,而且data里面放的就是你改变以后的结果,你能看懂吗?就是你改变以后的结果好,那如果说我们想知道,诶,那你原来是什么值呢?听好了啊,它在O里面给你放的是你原来的那个值。明白吧,你看刚刚我们是不是把一个数数改成了什么数数123123,所以说我们Maxwell采集到以后呢,他就看到了,诶你原来是叫数数对吧,现在呢,改成什么数数123123了,他会把整条结果呢,整条数据都给你发送过来,那这就是我们最终想要的结果,因为你数据做了修改了,那我写到我这个卡不卡中的时候,那我应该是拿到你最终修改以后的结果。
06:11
对吧,啊,说这个type也是很关键的啊,Type也是很关键的,OK,行,那我们可以用这个type干什么事呢?就是我昨天给大家讲过的,如果说你要明确的去区分你的数据是新增的数据。对吧,还是说是这个修改的数据,那你就要想通过tab来去做区分。明白吧,通过type来去做区分。好,那如果说你没有这个具体的需求说啊,我没我没必要没必要去区分什么新增修改的,我就什么把它放到统一的一个什么呀topic来处理吧,比如说你都是user info,那就什么都进这个user info中,那我那这个东西其实对于你们,对于我们来讲也就没有什么用了。听懂了吧,啊,就看你这个最后有没有这种类似这种需求啊行呃,那我们,呃,我是会把它用上的啊,就是我要用它的去做一个这个区分,我要把这个新增的呢,放到新增的这个topic里面,修改的放到修改的这个topic里面,对吧,我是会做一个区分的啊,虽然说我们后面也没有这个具体的这个需求,说要把它区分开,对吧,但是呢,呃,放到一起大家应该都会写。
07:13
对吧,那我们就写一个把它分开的啊,这样的话大家会有这么一个呃印象啊,就等你以后再去做这个实时处理的时候呢,呃,可能会遇到类似的这个需求啊,类似的情况,那么到时候你也就会写了。其实很简单,就是做一个判断而已,OK吧,行好,那我们明确了你的这个数据格式以后,那接下来不就是你正常的分流工作了吗?对吧,来吧,那就开始分呗,回到这儿。啊,开始做分流。好,那我拿套,呃,那我把这个截过来一个吧,好吧,截过来一个我就拿,拿什么呀,就拿这个就拿它吧,好吧,都可以。好来看一下啊呃,我拿到你的这一条数据以后,首先我们干什么事啊,同学们,其实首先啊,一上来以后,我就可以什么先干嘛呀,先去判断一下你这个类型。
08:10
能听懂吧,先判断你这个类型啊呃,看看你是update呢,还是这个什么insert呀,对吧,当然还有delete啊,Delete也有啊,对吧,就删除也有啊,Delete对吧,你是被删掉的数据啊,这也是有的。啊,这个大家都知道,我就不给你演示了啊,就是修改insert delete,好,那么这几个我们应该都是能够想得到的啊,那么大家想想啊,它还有没有可能出现别的类型这个地方。啊,我不知道这个以前有没有跟大家讲过啊,其实你看啊,像我们的update也好,Insert也好,Delete也好,这都这都属于属于我们的DML的操作,对不对。对吧,属于我们DML的操作啊,那你说我们对数据库的这个修改,还有DDL的操作呀。你说这个DDL的操作,他会不会帮我们记录下来呢?
09:01
对吧?啊,这个其实就是看你怎么用了啊,这个Mac应该也是支持的啊,这个DDL,不过它应该是要开启一个配置啊,这个配置呃,大家可以自己去找找啊,他应该是有的啊,嗯,我之前好像看到过啊,不过现在我们不用啊,同学们现在我们是不用的啊。的A对吧,嗯,可以找一下这个什么BD啊。这个。你看这个DDL是不是也有的呀,你看它既然会有这个什么就是DDL相关的这个什么就是配置,那它肯定是支持这个DDL的一些什么操作的。对吧。DDL什么卡不卡topic什么的啊,肯定是会有的啊,这这个具体哪个配置你得自己去看看了,好吧,啊,我就不再给你多去说了啊行,那现在我想给大家去说明白了一个事儿是什么呢?就是这个地方很有可能再会什么出现一些别的类型,比如说你这个DDL的类型,在这种类型的话呢,我们目前是不要的。那你看我是不是可以先根据你的这个操作类型,先去判断一下你的这条数据是不是我感兴趣的数据,如果是,那我就接着进行后续的处理,如果不是,那我就不处理了。
10:12
对吧。好,所以说呢啊,这个类型啊,可以帮助我们做两个事,第一个事帮我明确你是什么操作,第二个是帮我去过滤数据。对吧,我明确了你是什么操作以后,我就知道我要还是不要。能理解吧?好,所以你看接下来我要干什么事啊,同学们,我要做这样的一个操作。我先什么呀,提取类型啊,先提取类型啊,提取什么操作类型,呃,这个咱们提取操作类型的,那就什么使用这个加object。啊,加上OB勾夹。Get,比如说把这个什么叫tap给他拿过来,这是我的,嗯,就叫tap吧。啊,这个tap还不行,关键字是吧?呃,那叫这个op吧,Operator type。
11:06
可以吧,这是我的操作类型啊行,拿到这个操作类型以后,呃,我们现在比较关心的是三种对吧?呃,就是两种或者三种,就看你的情况吧,比如说我们要关心的是,呃,那我写一个这个吧,呃,这个多种判断的话,我这么写吧。就是这么来去写啊,就是oper match。对吧,我写一个什么模式匹配啊,怎么样,比如说呃,你是叫什么叫update对吧,呃,我们先写一个insert吧,然后呢,如果说你是insert。好,那我要做什么操作,呃,那比如说如果说你是inser的话,呃,我这么来写哈,我给他返回一个大写的一个I,好来我再来判断,如果说你是这个update,那我给他返回一个大写的一个U啊,比如说我还关心你的delete对不对,如果你是delete,好,那我给你返回一个大写的D,好,那如果说你是别的听好了,我给你返回就是个空。
12:09
OK吧,然后呢,把这个接收回去,好,这是最后我们的这个op --6就是你的操作的一个值。好,那你看啊,我这么写我能做到什么事情呢?我这么写的话,首先我第一个我通过这个我能够明确你是insert还是update还是delete,这没毛病吧,而且呢,我还可以通过这个值呢去看一看。我要不要你这个数据,因为我们想的说,只有这三种情况我才是要的。那也就代表着当你的数据是满足这三种情况的时候,那你最后的这个op value里面肯定是有值的,如果说你是别的类型的,是不是统一都走最后一个呀,那它就是一个呢?好,所以你看啊,接下来操作我就可以这么去做,如果说对吧,你的OPY6是不等于空的。
13:02
啊,不等于空的啊,这种情况下我才会接着进行你的这个分流处理。能不能听明白,如果说你是等于空的,那就代表着这条数据我就不要了。OK吧,我就不做后续的处理了。好,所以说我们这个操作类型,提取这个操作类型,我们可以做到两个事儿啊,这个判断操作类型好,可以做到两个操作,第一个就是明确你是什么操作,明确什么操作,第二个就是过滤什么过滤不需要的数据啊,就是不感兴趣的操作啊,不感兴趣的这个数据,对吧。你看吧,如果说你你拿到结果是个空,那就代表了你不是我的insert after delete的一种,那我的数据你就进入到我的处理过程中,那如果说你是这几种类型的话呢,诶,那我还可以拿上你这个值来去表示你是insert还是update还是delete。对吧,同学们。
14:00
能理解了吧,啊就这么去做啊好了,行呃,那把这个搞定以后,那接下来。干什么事情啊,同学们。啊,接下来我们是不是要去做这个操作了呀。我明确了,诶,你是我想要的数据,那我不就得把你的什么data呀拿出来,对吧,把你的表明啊拿出来,我是不是要开始组装数据,然后往后续去写了呀。对吧,说下面就是提取东西了啊,来提取什么呀,先提取表明吧,提取表明好,那这个表面提出来啊,这个表面怎么提呢?表明是这样去提的啊,那我们就啊直接什么呀,直接这个object value啊就不对啊这个呃找加object对吧,好get一个string,呃把这个叫什么叫table啊提出来。这是table name。对吧,提出表明来啊,然后下面什么提取什么呀,提取这个提取我们的数据啊,数据怎么提取啊。
15:04
数据是这样子的啊,它都叫data,那我就提data就行了啊,就是加上object。Get什么呀,Get一个就get磁圈吧,好,这是我们的,叫做data。OK,就叫data吧,好,那我把这个提出来以后,大家看看啊,接下来的操作我是不是就可以。干嘛了呀?啊。我是不是就可以开始去判断,诶,你是什么事实数据啊,还有什么什么维度数据啊,对吧,按照你不同的这个数据类型,然后去做一个分流呗。对吧,那怎么判断呢。大家想想啊,我怎么去判断你到底是事实数据还是这个维度数据啊?因为你将来你这个数据的什么。长得都是一样子的,那你说我怎么判断呀?我是不是只能从你的表名入手了呀,对吧,我看看你的表的名字,我看到你表的名字以后,你说我能不能明确出来你是事实数据还是维度数据。
16:01
这肯定可以的吧,你看到这个user info的时候,你不知道它是维度数据吗?对吧,你看到什么in的时候,你不知道它是一个事实数据吗。这肯定知道的吧,所以说啊,我们现在就需要有一个什么呀清单啊,这个清单呢,会告诉我哪些表是你的事实表,哪些表是你的维度表。对吧,这个清单我们需要把它。定义出来,那这个清单的话,我们得反复用啊,反复用的话,我就把它声明到外面,你看了啊,声明到这个位置,呃,声明到声明到外面。嗯,声明到这个地方啊。好来我们声明什么呀,就是叫事实表清单啊,我们先写啊,这个还是还是还是可以优化的啊,这是维度表清单,我们先把它写出来啊,写出来以后再来去考虑这个事情啊,这个事实表清单我们就叫嗯,事实表那叫factor tables啊清单清单那应该它是一个数组比较靠谱对不对,里面放的是一个组串对吧。
17:07
好,比如说啊,你的事实表有哪些呢?假设啊,什么order in for,我就随便写几个啊,还有什么order detail。对吧,就等等一些啊,那将来如果你还有别的东西,你就接着往里面去补,对吧,就是你这个缺啥补啥,将来就是啊对不对,还是这句话啊,缺啥补啥。能理解吧,那同样的道理啊,你的这个维度表的清单也是一样的啊,维度表的话叫dim tables。好,它也是一个瑞,然后呢,我们写上一个字符串,好等于呃字符串啊好后面我就写啊,呃维度表我就先写个什么user info吧,对吧,还有什么呀,比如说什么贝斯。就是我们会用到的啊pro对吧,当然还可写别的,比如说SQ info呀,什么SQ ino呀都是啊,你就缺大补上啊,一个道理。
18:03
对吧?好,那目前的话,我们就用这么几个表就够了啊,所以说我先把它写出来啊,行,写出来以后呢,我们现在就可以用了啊,但其实呢,大家现在应该也会在想一个问题啊,什么问题呢?就是缺啥补啥,那如果说我将来我缺了一个少了一个,那我需要去补,那我补的话呢,我就得去改代码,那我改代码的话,我就得停掉我的程序。这个其实不太好。对不对,所以说呢,我们就想着说,诶,能不能将来我实现一个什么,能够动态的去做一个配置。对吧,能够动态的去做一个配置,然后呢,呃,可以什么动态的去加减这个表,然后呢,还不用去停掉我的程序。那就比较好了。对吧?啊,因此这个地方的话,有一个,呃,有一个点吧,就是大家去思考一下,怎么去动态的配置一下啊,现在我们先不考虑那么多啊,我们后面这个把分流工作写完以后,再回头去琢磨这些这个问题,好吧,这个我先给他抛出来,抛出来以后你可以自己去思考一下啊,来写到这吧,就是如何啊这个动态配置这个表情单啊。
19:06
OK吧啊,把它这个问题抛到这啊行呃,那那这个有了以后,下面我们就可以做判断了啊,你看一下怎么判断呢?就是我要去判断,如果说看好了,你这个叫做呃呃叫tables叫什么呀?Contents包含包含什么呀,包含你的这个table name好,那这就是你的什么呀,叫做实时表,实时数据好。能理解吧,事实数据啊,那其实呃,Else的话就是我们的维度数据了。能理解吧啊,当然还有可能会是别的,就是我不包含的啊,就这里面我都不包含的啊,所以我们最好是做一个判断啊,来这个如果说呃,就l if吧啊这直接写一这再写个if也行啊,就是DM tables讲什么CTS啊,如果包含什么叫叫这个table内,好,那这是我们这个维度数据啊维度数据对吧。
20:04
能看到吧,同学们,一个是你的事实数据,一个是你的这个维度数据,好那这个事实数据的话呢,比较简单啊,事实数据我是不是就有什么呀,直接什么写到你的这个卡卡的什么对应的topic就完事了吧,好那怎么写呢?那你想哈,我们想描述,比如说你是订单表,那就写到订单topic,你是订单详情表,你就写到订单详情topic。那你说现在我怎么知道你是什么表啊?是不同你的表明来去说的呀,对吧,那我是不是可以按照你的表明来去对应我的这个topic名啊,能记得吗?同学们说说啊,你看啊,我要去分流之前,我先什么去把这个topic name写好啊,Topic name叫这个,呃,这个叫什么叫叫DWD吧,好吧。DWD,然后呢,这个topic啊,Name好生命好啊呃,那他应该用什么呀,同学们,那我们还是DWD,然后呢,后面加什么呀,后面我是不是可以考虑把你的表面给它加上啊,来到把你的什么table name加上。
21:03
好,然后呢,统一大写吧,To upcas。能行吧,好,然后呢,光有这个还还不满足啊,注意啊,我还不满意,为什么呢?因为我们之前说过哈,我是希望你把这个数据呢,按照你的操作类型给它分开的,比如说你是insert的,你就放到insert这个topic里面,你是update就放到update里面,那你看看我是不是可以在这个地方干,干一个什么事情啊,我是不是可以在它的后面,我再加上一个Dollar叫什么叫OP6。能不能看得懂,这样就相当于啊,如果说你当前你是一个insert的数据,那我最后的这个topic的名字就叫什么DWD,比如说叫order in for,然后呢,I对吧,如果你是update,那应该叫dwd order,然后呢,Info。呦。对吧,当然还有什么呀,就是你还有会还有会有删除对不对,那删除的就是order d。对吧,我什么放到这个不同的这个主题里面。
22:01
能明白吧,啊,就是我把它这个分开做处理啊,行,那如果说你怕这个主题做有冲突的话,那我觉得后面你还可以再带上一个叫什么,就是我我这个你们就不用带了哈,我是怕有这个冲突啊,我把这个咱们的呃,诶。嗯。括起来啊,对吧,我再接上一个什么咱们的这个班级号啊,这样会比较好一点啊,行吧,来这个我们写好以后,那接下来下一步不就是把数据写出去了吗?数据怎么写出去啊,那太简单了呀,是不是买卡不卡有t.sign对吧?发的时候你看了啊,我在发消息的时候,我们要往你的主题中发,主题就是我刚刚写好的叫DWD的什么topic name,那你的message消息什么消息不就是你的这个data吗?来data往出一写,这不就搞定了吗?
23:01
对吧,这样的话,我们的这个什么呀,就是你的事实数据,我就把它这个分流结束了。OK吧啊,事实数据分流结束啊,来我们做一个简单的测试啊同学们,这个怎么测呀,这个如果你要测的话,来我把这个程序呢,重新启动一下,我这里面就不做打印了啊,不做打印了,打印都去掉啊启动起来以后,我们现在去生成数据,呃,我们生成数据的话,嗯,应该都是一个insert的操作,对不对啊,都是一个insert操作,所以说呢,我现在可以干嘛呢?我现在可以。去去去干嘛去这个这个这个这个呃,监控一个主题吧,对吧,来监控一个主题啊。好,加工一个什么主题呢?就叫Kf.SH,然后呢,TC我们叫DWD,然后呢叫order in for I对吧,下滑在1018,好,我去交换这个主题,然后呢,我现在就去看看。我生成数据的时候,这个里面会不会有这个数据啊,那我们就什么DDS.sh直接跑一把啊,然后呢,时间我就不改了吧,就这样吧。
24:07
好,这个已经启动成功了啊,然后呢,我们就看这个能不能拿到数据就完事了啊。诶啊,拿到数据了吧,这个稍微有点慢啊,你看是不是拿到数据了呀,来拿到数据以后呢,我们可以做一个简单的对比啊,比如说到这里面啊,这也是我的out uo对吧,你这个刷新一下啊。好看一下这里面有什么,比如说随便找一个吧,啊,看看有没有啊,这个叫什么名字呀?呃,诶。我我写了,我写了个啥,我写了个order。呃,行,Order就order吧,Order就order来,那我就看这个order啊,看这个order。一样的对吧,反正这两个表我们都有啊奥来呃,随便找一个,比如说叫什么叫叫什么梦梦丽对吧,你看这里面有没有。肯定是有的啊,同学们对吧,你自己找找啊,这个这样不太好看是吧。
25:04
名字名字应该都在这啊。名字。呃,我我我看我找这里面吧,随便找一个,比如这个叫什么黄黄黄石太是吧,你看一下啊,这边有没有第一个就是吧,对吧?啊肯定会有的啊,就是我们现在是能够正常的把数据呢给它,呃,这个这个就是消费出来,然后呢做一个分流,把这个事实数据写到这个卡普卡中。OK吧,就这么去写就可以了啊行,这是我们分流这个是数据啊,然后呢,接下来我们再去分流这个维度数据啊好先听一下。
我来说两句