00:00
接下来呢,咱就要写这个主流数据了,对吧,好主流数据,嗯,那么。第一个。主流数据,我把这个截图拿过来啊呃,获取广播流的配置数据,这是第一步,把这个写上,第一步叫获取。广播的配置数据。对吧,获取广播的配置数据,好,那这个怎么做呢?还是一样的,第一步先获取我们的状态,然后状态呢,它是一个map,然后我们就get,根据key获取value对吧?好,那不管怎么样,先第一步获取它的一个状态看啊。这是一个read only context上下文只读的,因为你是广播过来的那种,相当于广播变量,对吧?那广播变量呢,对于我们用的这边而言,肯定是只读的,对吧?你看上面这个context,它就正常的一个context,而到了这边它就是一个read only只读的对吧?啊,那这很正常,因为是一个广告变量,跟SSPA里边我们说的一样,那广变量呢,只读对吧?啊,好,那就是Ctx.get还是一样的啊,我们之前也传过来了,二加V得到这个广播状态啊,那此时这个状态呢,也是一个read only,那他就没有破的方法了,对吧?来看啊。
01:21
点你看没有负的,只有content对吧,然后呢,这个叫get,然后呢是imnuable entries还是转化成entrance一个集合对吧,那这个转化成。迭代器你去便利啊,它都是读吧,都是读没有写啊,那下面就是object方法里边的内容啊啊,那咱们呢,肯定用get对吧?Get,然后这里边呢,传一个K,其实就是我们的表明啊呃,既然我们要传一个表明,那么就跟他有关系了,就是我们要考虑这个数据长什么样子,对吧,才能获取到表明,那这个数据你告诉我。它是怎么来的这主流数据,它整个数据流是什么样子。
02:02
这怎么来的?我们知道它来源于哪,这个数据是谁封装的,我们才能拿到它的数据格式吧。你告诉我主流数据哪来的?是不是我们消费的叫topic?DB啊。是不是咱们消费的topic DB,那DB这个数据又是谁写进去的?啊,Topic DB的这个数据是谁写进去的?就是你在处理任何数据,就是我们今天说的,你得知道这个数据的格式长什么样子,你才能够。处理。哎,大家说的不错啊,就是Maxwell好,它来自于Maxwell,所以呢,咱们的格式我是不是保留过对吧?好,那我呢。哪一个有数据的。
03:00
诶,这是我们要的对吧,比如说你拿这个啊。把它拿过来,至于in inside update这个无所谓的啊,我们都需要对吧,拿过来我们只要这个数据啊,好,那数据格式呢,往这一放,呃,那我们这得放一个表明,表明在哪,在这吧。Table对吧,我们要取。这个里边的table好,那简单了啊,而且本身就是Jason对象对吧,你就直接value.get string,然后呢,写table,你看我把这个数据往那一放,就非常简单非常轻松了,对吧?好啊,我们再回车得到一个table process,诶,这就是我们要的那个数据。对吧,这是我们要的数据,好,那接下来我们好,那第二件事情呢,就过滤字段。对吧,第二过滤字段,呃,那咱们过滤字段怎么写呢?我们要对谁啊,对这个贝塔。
04:07
哎,那对象你看啊,现在有ID,有TM name,有这个logo ul,但是呢,我们可能这个logo UR不要把它过滤掉,那根据谁啊,根据table process里边的s column字段吧,对吧,所以呢,我们写一个叫filter column。嗯,叫卡姆卡姆斯都行啊,这个无所谓啊,呃,那我们传进去的东西应该是谁啊,首先这个data要传进去吧,数据本身啊,那叫value点。Get object啊,因为我们要对这个电做加工,所以你不要写s string好。第二个,那当然是table process点。Get single columns。对吧,我们要做这个事情好,那这个地方呢,有一个疑问。什么呢?我们把这个数据获取到,然后直接拿着它去调一个方法,我们要思考一个问题。
05:04
这个东西有没有可能为那。就是当前这个table process有没有可能是纸?如果他有可能你要注意,那这你直接调用它不是控指针了吗。对吧,那你要想一下这个东西。他。有没有可能为囊值?如果有可能,那么它在什么时候就是值?他有没有可能为nu?
06:04
嗯。学到这有点晕了是不是?想一想啊,这个东西有没有可能没倒纸,如果说他有可能没倒纸,你直接这样用,这不控制针了嘛,对吧,你拿这个闹去调方法,那肯定控制针了。修改后的。呃,修改后的是什么意思?啊,班长说了四个字,叫修改后的。嗯,没懂。就是。就是你觉得有可能文档值对吧,然后呢,叫修改后的文档值,修改后的是啥意思。其他同学也可以说一说对吧,这玩意儿有没有可能没呢?如果有可能,那他在。
07:00
什么时候会升值?啊。因为只有这样我们才知道。如果他出现。Table不是那。Table process不会闹。Update。塔。Update的。Update的。没闹吗?这不update吗?阿的data它不为呢,而且我问你的是table process为不为呢?跟这个德塔有什么关系啊?就没懂。对吧,就是你看我现在问的是这个东西有没有可能是nu值对吧,我注释都写在这儿,这个通过table这个表明获取的呀,那根就而D它不是它不可能为的。对吧,第二就算你没呢,跟我这个也没关系吧,我这个获取数据跟现在用到了data吗。
08:08
也没用到呀。对吧,然后雷总说了,他说这个table这个东西不是钠,那么这个就不是钠。那也就是说你你这个数据就不可能为档对吧,如果他一旦为档了,是不是就出现异常了,你就没有表明对吧?啊没有表明我我也就不要是这意思吗。注意啊,你们学到现在怎么就有点晕了呢?啊,很晕啊。有点懵了啊,整个数据流搞不清楚了,在脑子里边可能现在是一团浆糊啊。很懵,After。哪有after?哪有other?啊,怎么这现在这个东西。
09:03
越聊越乱呢。表删了会不会闻到?啊。哎哟,我服你们了。好,那你告诉我,我问大家啊。这个表呢,有46张。对吧,有49张表。如果表没有配置的话,有可能没到对翔总说的没问题啊,你看啊,你要知道我们现在在干嘛要过滤呀,对吧,你看这边有46张表,那么对应的这个Y6是不是就有可能是这46张表的任何一张表的数据,因为它是主流数据。对吧,它这个value代表着46张表数据吧,而这个地方。假如说我要的尾表只有十张。
10:00
好,那假如说我这个数据呢,它是这样的一条数据来注意看啊。其他东西不改了。我的表明不是什么base mark,而是谁呢?叫all info,后面这个我不改了,大家知道一下,它对应的是all in for的数据,我就不改这个东西了,可以吧,或者说呢,我这样,我把这个干掉,我去点点点。我写点点点可以吧啊,这样的话就不容易出现问题啊,那ID总总归有的啊,然后呢,这个我就点点点啊,它数据来了一个凹的info。对吧?那out in传进来获取,能不能获取到table process,你是一个map。能不能获取到?啊,我说了大家学到现在为止有一点晕了是不是。
11:01
那你看我的这个很明显是一个事实表吧,那作为all in for,咱未来肯定不会把all in for写在这儿,对吧,这里边我只会写。为了。只会写为表,那我们的实时表压根就不会写,那但是这个value。它有可能是一个事实表吧。它有可能是一个实时表,好,那实时表来了,你获取的它必然为能。对吧,而且它是正常逻辑下都有可能没,那所以呢,我们家做if table process,它不等于那你才能去做这个事儿。好,那第二过滤你得在table process不等于none的时候去做好,那反之如果说它等于none了呢,那这个数据我们是不是就相当于是过滤掉的数据啊,就不要的数据。
12:12
对吧,这个数据呢,就不要。直接舍弃就是,呃,要不然呢,这个数据它是一个事实表,哎,它不是伪表,或者说呢,你就算是维表,有可能我也不用这个微表,假如说我总共有11张微表,但是呢,我只需要十张,我就写了十个对吧,反正呢,我肯定在。广播状态里边没写这个表明。所以你获取的是个那而且是正常的对吧,所以呢,我们等一句话。嗯。这个就是找不到对应的K对吧,找不到。对应的K啊,这个K是谁呢?就是他。
13:06
Table。对吧,放进来。嘿,我找不到。啊,诶,雷总说了一句话,说能从广播状态拿到table就能拿到table process没问题,对吧?但是广播状态里边有可能有的表明它不存在,对吧?我举个例子,你这个value未来是不是46张表的数据都会放在这儿,比如说它会来了一个order in for,但是我的配置信息里边不可能有all info,对吧?那你在状态里边拿着all的info去获取数据,它不可能有。对吧,他不可能有。对吧,所以那就找不到对应的K,那就相当于我们就不要这个数据就过滤掉,那过滤就体现在这儿,对吧,我直接打印不写出去啊注意那你要写出去,你肯定通过out写到流里边吧,那这个我只是在这打印了啊,你不打印也行,你这个直接就不要。
14:02
它也是相当于过滤,你就不要这个数据了嘛,对吧,你找不到这个配置信息,它不是过滤啊,我们之前说了,这个操作最核心的,不要忘了我们最根本做的是做什么。过滤数据,过滤我们想要的维表信息啊,对吧,那这个体现在哪呢?诶就这一步了。对吧,我们状态里边有我才要这个数据,没有就不要对吧,所以过滤字段我们等会写,做完之后我们就可以干什么。补充叫think table,并写出的流动OK吧,最核心的过滤就是体现在这一步,OK吧,好,那接下来呢,我们来过滤这个字段,Out加回车,让他自己创建这个方法,对吧?呃,这个呢,是过滤数据。贝塔长什么样子?
15:01
拿一个啊。好,那我们的thinks呢,应该是。ID逗号。对吧,它呢是一个自扇。呃,那我们要做的方案呢,其实就比较简单,我们干什么事了。便利这里边的T。对吧,便利这里边的key,然后去看这个think columns里边是否存在。如果存在,那就保留,如果不存在,比如说logo u r,我就把这个建支队给他干什么。删掉。逻辑是不是这样对吧,我们要做的事情,你想想看是不是对他。每一个建筑队进行便利对吧,然后判断在这个里边有没有有。就保留,如果没有对吧,你这个K在这里边不存在,诶它是不存在的,那就怎么样,那就把这个数据,把这个整个建设队给他干掉。
16:09
没问题吧,逻辑是不是这样子的。对吧,这有没有问题,没有问题扣一。这个没毛病吧,啊,肯定这样子的好,关键问题在于它这个接S价格的,那我怎么便利。对吧,我们想法挺好的,说对这个数据进行便利对吧,然后呢,判断在这里边有没有啊呃,但是呢,它是一个介object,我应该怎么便利啊,注意在接算object,未来你再遇到它处理的时候,你当它是map就好了。你当它是map OK吧,好,那对于这个map,我们要对建设队进行便利,我们怎么做点?
17:02
Set。对吧,啊安,然后呢,Entries点。迭加器啊,这个就是Java集合的一个便利,这个当然跟你们所学习的skyla比起来,那就没法比了,对吧?Skyla写起来最爽的就是什么呢?集合的操作是最爽的。啊,Java里边每一种集合它的便利方式都不太一样啊,数组的。List对吧?集合什么set map这便利方式都不一样,而在scale里边统一的你有返回值,写map不需要返回值,For each对吧?它所有的集合都有这两种编利方式啊,但是Java里边它不一样,它每一种都不一样,对吧?好,那咱们呢,就把它当做map来遍利啊,Map便利方式呢,呃,ENT side。Key set是不是都可以啊,对吧,但是呢,我要删除整个兼职队,所以呢,我用entry side去编利会更好一点,对吧,我要把整个删掉啊好,那下来呢,就是while。
18:10
点has next,然后呢,点next,哎,把它取出来对吧。啊,把它取出来。取出来。干什么事呢?判断这个数据是否。在对吧,啊,那我们怎么判断呢?那就直接拿着think columns点。对吧,诶是否包含谁呢,Next点。Get key,好,但是呢,我们得做判断对吧,X。If啊,那我们要取反,取反如果不包含,我们把这个数据删掉,对吧,那就怎么样。特点为幕吧,对吧,把整个建筑队给它删掉就好了啊就这样的写好,那我问大家我这样写。
19:04
有没有问题?啊,如果有问题。我应该怎么改?就是跟我们思路是一样的吗。对吧,呃,对得塔进行便利。啊。对这个整个建支队进行便利,ENT嘛,是一个建支队对吧,建支队进便利,便利过程当中呢,判断在think color里边是否存在。如果存在了。那就保留,如果不存在就删除掉,对吧,所以我们取了一个反。啊全了反,然后呢,Remove对吧,如果存在A,如果它是它是包含的,那就无所谓了。这个里边。
20:00
他有什么问题啊。来大家呢,可能看不出来啊,我既然这样问了,那肯定有问题对吧,大家肯定就掌握到这个点了啊呃,那他的问题是这样子的,我给他写一个例子,大家就明白了啊,可能你们自己想的不太好想啊。比如说我的data塔是这样,我只写KY,我不写了。我多写几个啊,先写上Y6呢,我们就空着对吧。嗯。这个应该是个冒号对吧,三个数据啊,好比如说这边是ID。啊,空着OK吧啊或者说解写一个吧,省得空着大家看着不舒服啊,第二个呢是TM啊或者第二个name对吧。叫A,第三个呢是TM。叫BB好,那我对应的s columns。
21:00
这个卡是谁呢?ID?加这个。发现问题了吗?有没有发现问题啊?它里边是不是可能存在于这样的问题啊,但是这种情况比较少见啊,但是呢,我们写完代码之后。他可能存在这样问题,这是什么问题啊。你看啊,我们本来只要写的只要ID跟t m midd吧,只要这两个字段,但是你尝试边历走一遍,看看ID存不存在,在集合在这个字符串当中存在,对吧,那么呢。也存在啊,你看这这不是那吗。对吧,那TM内呢也存在啊,是不是多保留了,因为我们的列名,它之间可能存在这种包含的关系,所以你直接拿着字符串判断。
22:04
他可能会出现这样的问题,这个问题能看明白吗?就是本来我只要这两个字段,但是由于我们的字段是这样子的,是不是三个字段都保留着。对不对。是不是会把三个字段都保留下来了,对不对。能明白吧。OK吗?是不是里边可能会存在这样的问题啊啊,那既然我们提出来这个问题了,那怎么改呢。那咱们怎么改?咱们怎么改?
23:00
对吧,发现问题了得会改呀。不能不改吧?呃,咱们怎么改这个东西。Equals。S什么S?对了啊,云总说没问题,要切分。啊,要切分之后再去比较啊好,那我们。切分。这个对吧,啊对它进行按照逗号分割。得到一个。啊,得到一个S对吧,呃,但是这个。他有抗方法吗?没有。
24:01
它没有,但是我们知道集合是不是有啊,所以呢,我们要把这个数组变成集合啊,那这个怎么写呢。点at least,把这个数组变成集合,叫column。对吧,好,那接下来呢,拿它。去判断就可以了。对吧,拿了集合去contain,诶,必须包含这个元素,那就像方总所说的equals,对吧,它必须要完全一样的才可以。啊,它不是子串的关系啊,啊,它可不是子串,它呢里面有ID跟TM name,那你就必须叫ID或者TM name才可以。比较内不行啊,因为我直接拿字符串,它其实就比较的子串对吧?好,那我们变成集合就好了啊,这边呢飘黄飘黄呢,因为它有简写啊,它有简写的方式,那怎么办呢?咱们这样啊,我把这个呢复制一份啊,因为这个简写啊,虽然能看得懂,大家呢自己写出来可能有点麻烦,对吧,咱们怎么弄呢?我把这个给你注释掉。
25:07
啊,这个呢,上面是我们按照逻辑来的,对吧,然后呢,我们看一下它这个简写alt加回车。叫entrance.remove if,诶能看得懂对吧,移除,诶if对吧,什么时候移除呢?病历next,然后呢,诶不包含的时候溢出啊这个简写看着就能看得懂,但是呢,我们在Java吧里边,其实。比较少用这种纳表达式的方式,对吧,所以我们自己写出来,如果SKY了,可能大家呢,习惯这样写,但是Java里边写的少,所以还是不习惯,所以呢,我刚才写的是这种对吧,但是呢,我们诶。让它自动简化一下,对吧,就这样啊呃,当然这个还给他保留着这个逻辑呢,比较清楚一点,对吧,Java代码还是习惯上这样写啊,加代码可能大家就这样写了,当然这个简化之后能看得懂,但是如果说告诉你直接这样写,可能更多的同学呢,都不太能写的出来,因为咱们Java吧里边其实比较少用这个。
26:13
那么达表达式对吧?啊好,那这个过滤咱们就。搞定了啊,第二件事做完对吧?好,那接下来呢,我们要做第三步叫补充think table,并写出到流当中对吧?好,那补充字段太简单了啊,就Y6点啊,那个接算法还是错的对吧?Put的,那我们的think。Table啊,因为我们最后呢,要把数据写到Phoenix表里边,那表明得有对吧,好,那接下来是这个value。啊,我们。数据,数据呢,来自于table process。获取我们的think table,对吧,这是补充,然后呢,写出去那就out.connect把这个value写出去。对吧,把这把要写出去,那同时起到了一个过滤的作用,我们说了啊,然后呢,补充了字段过滤,过滤也过滤了,然后呢,字段也补充了,然后呢可以写出去。
27:08
对吧,啊,这一步第三步就搞定了,它很简单啊,就直接补充一个字段,然后呢,Alt写出,因为流里边正常的alt写错,写到主流嘛,对吧?啊,因为咱们也没有什么特殊流,也不用这个什么ctx去做处理啊好,那到这个为止呢,咱们主流就。搞定了,可以了。
我来说两句