00:00
好,那接下来呢,我们还有一些事情要去做一下什么事呢,大家应该还记得之前啊呃,我们这个数据或者说呢,我到这个页面上,我来给他拿一个啊,在这边我随便拿一个拿它吧。它一直到这对吧,我给它拿出来CTRLC啊,然后呢,F3定在这。诶,这个不太好看对吧,呃不太好看,那比方说我给它粘出来啊。站到这个位置。这个是变针。我看一下咖啡,哎,这样好。那这个呢,我们就可以不要了,对吧?啊,我只是过一下,那还还剩一个什么事呢,你比方看啊,这个是不是我们之前用data stream API,它自己所携带的这个反序列化的类来产生的结果啊,啊,那他自己反虚列化这个东西是怎么写的呢?我们来看一下,非常简单粗暴啊,在这里边。
01:04
点进来,它其实直接你看这是一个DR一个方法,那这个就反其量的方法,那这里边它是怎么玩的,直接把这个record调用了他自己的to string方法来做的。好,那所以你看到啊,这里边明显是一个对象,就是跟我们生成to string方法一样的,然后大括二,然后呢,KVKVKV用那样的方式来做的是不是。对吧,那这种方式你要做打印也没有问题,所有的信息呢,也都能看得到,也没有问题,对吧,但是。我们这个数据读到之后不能光做打印。我们是不是还要传到ODS层,然后消费还要做什么生成DWD等等这样的事情?是不是对吧,所以你光成这个样子,那下游根本没办法处理这个数据了。
02:04
这个数据你怎么处理呀,对吧,它是一个字符串,那你把它变成对象吗?变不过来,它拼接乱七八糟东西一堆,对吧,你用字符串的方式split切分。也不太合适吧,因为他这个对象里边还包含其他对象,你看它当前source record的第一个属性呢,叫source parts。那另外它有一个叫south of south of明显又是一个什么。又是KVKV你看包括这里边也一样的,那你光按逗号分割也不太合适,按等于分割都不太合适。对吧,所以这是没办法,所以这个时候逼着我们不得不去干什么自定义了啊,我们要自定义一个反虚的化器啊,自定义一个反虚的化器是这样的方式才可以,对吧?好,那这边呢,我们就要写一个这样的代码,那这个代码呢,我们就把它复制过来啊,CTRLC啊,在它的基础上去改一改吧,呃,这边呢,我们叫with。
03:01
Custom。呃,自定义的一个。啊,就叫disorization吧,啊就叫这个名字对吧,Disorization啊保存,但是这个呢,我们得改啊,那首先checkpoint的这个东西呢,我就不要了啊,我就跟他没什么关系,错了嘛,对吧?啊好,这些都测过了,呃,那将下来呢,还是读取这张表,那无非要改的是不是这里面的东西。对吧,好,那我们就制定一个。把这个名字拿过来。在这边我们写一个这个类啊,叫customer d civilization啊,那这个东西呢,肯定要实现一个什么接口,或者继承一个什么抽象类,那我们就看它就行了,它呢是实现的这个接口,那我们也去实现这个接口,对吧,就这样子的,那我们也要变成three嘛,我们要把它变成切S格式的啊。
04:00
Out加回车实现里面的方法,两个方法,第一个这个是最核心的啊,第ize,第1SOLA的一个方法对吧?那第二个呢是table information它的类型,那我们也是string类型,所以呢,我们可以把这个拿过来,他怎么写的我们就怎么写就好。因为我俩类型一样,所以这个东西呢,跟源码当中保持一致就够了,对吧,那有时候大家在制定一些东西的时候一样啊,也是通过这种方式来做就好了,对吧?好,那接下来呢,我们这边我们先想一下,我们要把这个数据变成什么格式,方便后续去用。对吧,那什么样的方式。就是说这个封装的数据格式为什么样子,我们得知道一下对不对。什么样子会更舒服一点啊?我们是不是把它变成一个JS字符串呢?
05:03
对TS格式吧,未来我们转成接对象是不是更好处理呀,我们现在要反学的话,不就是为了方便处理数据嘛,是不是啊,对吧,所以我们要封装成杰森,那大家想一下这个杰森当中我们有哪些东西需要去放呢?我们有什么东西需要去放呢?对吧,大家能不能告诉我,我有哪些东西需要去放?胡总说了,辞退。浮总的意思是这样吧,这个地方我放ID。对吧,然后这个地方是TM_name。
06:02
是这样吗?是这样吗?肯定不行,对不对。这样肯定不行,因为你要这样发数据的话。那我们data stream可是能够监控多库多表的。你要直接这样去放数据,每一条数据是不是都不一样了,你怎么分这个数据来自于哪个库,哪个表呢?所以第一个像其他同学很多同学说到的,对吧,那光表明也不够啊,因为在弗林和CC当中,我们对塔C配间是不是可以兼顾多库啊?能明白这个事吗?所以我们要放的是什么呢?Data是不是要放一个对吧?要放进来,好,接下来第二个是不是table name也要放进来。Table name要放进来吧,这两个东西必不可少,好,那第三个还有什么呢?有同学提到了,哎,中总提到了操作,操作类型要放进来,因为在未来我们处理数据的时候,你新增数据还是更新数据还是删除数据,是不是可能我们操作的方式怎么样?
07:18
是不一样的,对吧,未来新增数据可能我们要按A操作,更新数据按B操作,那所以这里边儿我们是不是要操作类型。要保留下来。对吧,这里面呢放CD吧。类似于这样东西啊,等会儿呢,当然我们可能也会改。啊,那这几个东西要放进来,那接下来你想想看,我们数据怎么放,是像我们说的这样吗?哎,数据呢,你就放ID TM name这样放吗?大家觉得合适吗?想一想。数据我能直接把它打散在里面放吗?
08:03
放ID TM name,这样放可以吗?不可以吧,如果你这样放的话,是不是不利于后续处理啊,对吧?哎,有同学提到了,再来一个杰森,也就是说我们这个地方。对,每个表都不一样,我们这个数据肯定要统一,对不对,要统一啊,所以呢,咱们应该怎么报。而且既然我们D的数据也要保留进来,对吧,这个R没有啊,这个错了,应该是CU created对吧,这三个啊,所以呢,我们放一个before数据。Before before里边这个地方是一个什么?又是一个杰森。是不是对吧,那下面这个呢。
09:01
这边逗号隔开,我们是不是来一个after?我们是不是可以这样对吧,那这样的话是不是就没有问题了,因为你根据这个户名表明你就知道了对应的字段名,所以呢,这个里边放数据,哎,用杰森套杰森的方式吧,用杰森套杰森的方式。OK吗?好,那有的同学可能说的还有这个时间戳对吧,那你要想放时间戳,其实你也可以放一个TS对吧,这边呢放一个时间戳,但实际上一般的如果我们要用数据里边实践时间的话,那一定用的是这里边的时间。用的一定是这里边的时间,所以这个你要想要你就要,你要不想要无所谓对吧,这个呢是可省的啊,只有这个可以省对吧,但是你要加一下,你用当前时间传输进去也可以啊,那因为一般的来说,生产环境当中,我们真的要用试点时间的时候,那也一定用的是谁啊。
10:03
用的是这个数据里边的时间OK吗?关于这个格式上还有没有什么其他的问题?格式上有没有什么其他的问题?呃,李总你这边。是有什么问题吗?可以说一下。二是什么意思啊?哦对,二是代表没有的意思是吧,啊对对对对,一是表示有。Before里边不同表数据字段不一样,怎么获得?啊,你的意思是说这个每一张表before跟after的不一样是吗?没关系啊,没关系,因为在这个里边你看啊,我们是从log读过来的数据,那么每一条数据都对应有自己的STEM信息,也就是说原数据信息,我们可以根据原数据信息拿到字段名,我我懂这个彭总的意思啊,彭总的意思说的是,那这里边你要写ID对吧,然后这个地方呢,是TM name,然后呢,根据获取数据那一样的,这个地方呢也是ID,这个地方呢是TM name,但是换一张表可能就不是ID加TM内的,那我怎么去给他的这个赋值呢?对吧,这没关系,在这个里边每一条数据你看啊,他自己带了,有比方说这个数据吧,你看啊这边。
11:39
ID等于13 TM name等于SH,能听懂吗?对,它是有的啊,直接对有大说了,胡总说了,这边是一个structure的对象,那我直接对这个sta的对象进行解析,因为他的T在这,我们就可以做封装,OK吧,啊,还好我没有曲解彭总的意思,对吧?啊,我理解了他说的这个意思啊,对吧,每张表不一样,那你要写死不太合适对吧?所以呢,我们是根据数据当中自己携带的这个信息来做的,而不是说自己在直接在里面写死啊,不是这个意思对吧?因为有多库多表嘛,好,这个就搞定了,我们就把这个格式就敲定了,大家呢,也没有什么其他的啊呃,身边有很多人睡着了,对吧,你看挑二的没几个。
12:32
我们每来一条数据,获得一条after before里边的数据还有必要吗?只拿after行不行?看你业务逻辑。孙总,看业务逻辑。看业务逻辑,假如说你需要对电力的数据做处理,做处理,那就需要。那就那就需要获取比错数据。对吧,假如说我要对d delete的数据单独有什么操作,我是不是一定要获取b before数据啊,因为d delete的数据它只有b before,没有after。
13:00
啊是这样的,就看你业务,那我们不考虑业务的情况下,是不是都放下去没有问题啊,对吧,都传下去,你下游再要的时候,你不要,你给你过滤掉嘛,你要要哎我们保留了,但前面你都给他干掉了,就没保留下去。那后面不就有问题了吗?你后面再要要不着了是不是对吧。
我来说两句