00:00
嗯,接下来我们coding啊,这前面要什么加这些东西呢,先不用管啊,这个东西呢,都不用管这个一大堆啊,所以我当时说了这个需求比较复杂嘛,对吧?啊,他有一大堆要查这个查这个查那个的啊,这个呢都不用管,直接跳到这个。招聘。啊,直接跳到咱们的招聘这来,你看前置这么多对吧?啊,以前我们都直接上来就招聘这个呢,到第11个,前面还有十个嘞。你想想看对吧,也有没有到没有十个类啊,到没有十个类,就是说有还有十步操作,还有十步操作对吧,才到这个招聘啊,你想想看,这个需求比较复杂啊,因为这个工具类呢,我是想用到的时候再给大家去添加,而不是说现在呢,就把这个工具类给大家改好,大家都不知道干嘛的,对吧?啊一步一步来啊,我们呢,先不着急啊。先呢,我们把招聘。
01:02
拿过来,接下来呢。这个拿过来。嗯。啊,这个名字改一下啊。改它吧,叫trade use PU or病对吧,这个啊好那。接下来这里边呢,还是我们那些字段,哎,这两个字段刚才我们已经聊过了,对吧,叫不写出去啊,啊use idqdq name对吧,All the count加all the amount加一个时间戳啊前面的微表在这啊嗯,这个里边呢,咱们之前提到过要用这个。构造者设计模式。对吧,我们之前是不是说过要用构造者设计模式,那就在这儿啊。加一个这个build的注解就可以了啊,并不需要你自己写什么代码啊,那后面呢,你就可以写这个方式了,你比如说啊,我在这边给大家看一下。
02:08
哎。啊啊,比如说呢,以前正常的我们要构建一个对象,是不是得new啊。对吧,诶new这个叫什么?呃,Trade use the b,然后呢,你要写一堆对吧,你这玩意呢,写一堆好多呢,都是空的,这样很不爽啊,那现在呢,有了这个标的注解以后,我们就可以怎么做呢?诶直接这样叫。柚子点。Build。啊,最后呢,调用build好,这中间呢,你想给什么字段,比如说我有SQID对吧?哎,那我给上这个。SQID,好,呃,那我呢,有这个user ID对吧?好,那么接下来呢,我就给这个user ID就好了。
03:00
那没有的你就不给。不用给对吧,这方便吗?是不是比你要去拗这个对象是不是来的方便啊。对吧,你要你有这个对象的话。你所有子弹都要给。那你不给不行啊,对吧,啊就很麻烦啊,所以呢,咱们用的是构造者设计模式写的这个招聘啊,也没有大家想的那么复杂,就加一个标注解,这个呢,也是我们小小辣椒这个插件下的。OK吧,是小了点跟这个贝塔还有这个呃,参数的构造方法呀,对吧,还有当然还有这个啊。这个参数啊,还有一个,哎,错了。已经有这个了,对吧,还有一个。No,阿卡的空餐构造,全餐构造都一样,都来自于这个小捞小辣椒这个插件下的,OK吧,这是我们的一个招聘啊呃,那接下来呢,我们就开始写我们的这个核心代码,当然了,我们把思路去整理一下,对吧?来在这边啊。
04:04
呃,把这个。拿过来。往那放对吧,接下来呢,整理一下我们的一个思路。啊,在。这边对吧,在这啊好来。当然这个就还好了啊,到这一步为止,对吧,我们已经分析过了,来看一下啊呃,首先。是订单明细主题对吧,就是那个下单主题的数据,接下来呢,把这个数据转成切。对象。对吧,肯定要转接层要好处理一点啊呃,当然转接层的时候呢,可以过滤这种。脏数据,因为从上游过来数据可能会为空,对吧,类似于这种情况,那我们还是一样的,可以过滤这个。脏数据啊,接下来呢,按违建去重啊,这个违建呢,当然是这个订单的明细。
05:02
ID对吧,根据明细ID去重,这个呢,我们之前就提到过,我们要做这个,这是第一次去重啊好,那再接下来往下呢,转换我们的数据结构去换去好重以后。对吧,转化成招聘啊,转成招聘啊,转化成招聘以后呢,我们就可以做什么事了。关联为表补充。维度信息。对吧?啊补充什么呢?有这个SKU啊,关联这个SKU表对吧,补充trademark category SKU啊这些东西最后呢,呃,设置水位线。分组开窗聚合。对吧,啊,分组开张结合好好,那再往后呢。补充与分组无关的维托斯坦,当然了,在这边我们到时候写的时候啊,在这儿一次性给它。补充好就行了啊,那这个地方是什么意思啊,这个地方是什么意思,来给大家去聊一下这个事儿啊呃,那诶怎么。
06:07
有两个呢?对吧,啊,有两次这个关联维表呢,对吧?好,那之前最早的时候,我们是不是提到过,我们要关联几张维表,大家还记得。我们之前提到的要关联几张为表,大家可还记得?嗯。对,关联六张为表了。对吧。是关联六张为表,好,那这六张为表呢?我们来搂一眼啊。看这个建表语句就知道了,对吧?呃,首先呢要关联。这个SKU吧。对吧,找到谁呢。PD。他妈个3ID。还有这个。
07:01
啊,K3ID加trademark ID是不是关联SQ four就可以把这三个信息拿到。对吧,好,呃,那我想问大家,最后呢,我做分组开窗聚合对吧,这个分组条件应该是什么。是不是应该是这些。对不对,就是正常来说呢,我们的分组条件K是不是按照这个字段进行分组啊,这九个吧。有没有问题?然后呢,去求求。All the对不对?我们是不是要根据这九个字段进行分组,求all count以及all amount?没问题吧,好,那我问再问大家啊。
08:03
为什么我们刚才看流程图思路梳理的时候呢,他们好像刚才我们之间不一样,对吧,那你看我根据这九个字段,如果说我要根据这九个字段。进行分组啊,那我能不能只根据这四个大家看啊。大家想一下,根据这四个字段,结果是不是一样的?一二。三。四。就是按正常来说呢,我们想的应该是根据这九个字段对吧?去呃,应该还不止九个是11个是吧。TRADEMARK123这四个了啊,PU这十个11个11个字段啊,本来呢,我要根据11个字段去分组啊,九个11个无所谓嘛,对吧,然后接下来呢,我这边换了,我能不能只根据u idu的ID对吧?SPU,然后呢,Trademark category3id,我只根据这四个。
09:10
去分组,哎,以及就是我根据11个字段分组和根据这四个字段分组,我得到的奥count的以及奥特曼的有没有区别,大家告诉我。有没有区别?有没有区别?那当然是没有的。对吧,没有区别的,因为我们呢,CATEGORY3会唯一对应一个CATEG3的name,它是唯一确定的,对吧,然后呢,呃,它会唯一找到对应的CATEGORY2以及唯一的CATEGORY1啊同理我呢。
10:00
SPUID会唯一找到SP name trademark ID会唯一找到trademark name,所以呢,你根据11个字段分组和我根据。四个字段分组,没有任何差别。啊,好,那。这边。就知道为什么刚才我们看到的效果是这样子的,对吧。啊,就是先呢,我们去关联,去补充与分组相关的维度,也就是说就是这个。对吧,关联SQ info去取trademark ID,开这个3IDSQID,然后呢,接下来按照这四个进行分组,对吧?哎,水位线分组开窗聚合啊,聚合好以后我再去关联其他的几个为表,这为表包括。PUB321。对吧,那呃。大家想一个问题。
11:00
这个呢,我们这样做与把这个东西放在这儿。有什么好处,就是我们这当前的方案,那我们呢,是不是也可以在这全部的补充上,在这边分组的时候呢,我按11个字段分组,结果呢,也没问题,那么我把这个放到后面与放到前面相比有什么好处,大家告诉我。能不能体会到?自己先去get一下这中间的好处,看大家能不能体会到。啊,我看有没有同学能够率先的发现到这样做的一个好处啊,给我说出来。那两种方案没区别对吧?那为什么我不直接把维表都关联好。我非得分两次关联呢,我先关联SKU对吧,然后后一次关联呢,关联SKU trademark。
12:07
能不能体会到它有什么好处?班长,你说一说。减少内存的使用。班长,你觉得呢?想总说减少内存的使用。呃。怎么减少内存了?啊,班长,你觉得呢?
13:08
啊,牛总说了,不用多次读取维表数据。嗯。还有呢?啊,班长不说。啊,其实牛总说的关键点了哈,牛总说的是关键点对吧,因为你看嗯,我们呢可以。放在这儿去关联,也可以放在这个位置,对吧,但这两个区别的是什么呢?一个呢在分组开窗聚合前,一个在分组开窗聚合后。对吧,那我把这个这个没办法,你必须要在分组前把这些字段拿到,因为我要根据这些东西做分组,对吧。那我把这些不是非必要的为表呢,放在这个后面,那我已经聚合了,那聚合以后是不是这边注意啊,这边的数据量要比这边的数据量要小是不是。
14:12
就是聚合后的数据量是不是要小啊,那既然你数据量小了,我关联为表,我是不是。读取菲enix的次数会降低啊,那我是一个流程序,你呢要访问第三方数据库。对吧,那我肯定是越少访问越好呀。能明白了吗,现在。对吧,所以呢,我们把无关的字段呢,都放到。聚合以后去关联,减少关联的次数。提高效率,因为你关联的时候,因为你想想看这个为表它的Phoenix。你要去查,哎,对吧,你无论用lookup lookup这种方式呢,是不是也要去查呀,对吧,你数据量小,查的次数是不是就少了。
15:04
你查的次数少了,效率是不是提高了,能明白吧?这样一说是不是就明白了对吧,好处就在于,那你呢,是聚合以后数据量会下降,数据量会下来对吧,那接下来关联为表呢。就和搬砖一样啊。好,那就是这个点对吧?啊,那再去关联这个维表,关联好以后呢,我们就可以写到克里house斯了,对吧,就可以写出去了,因为到这步为止呢,数据就全了,对吧?写出去的时候呢,我们的SQD,还有那个什么set这个集合不用写出,因为我们加了transcent think这个注解对吧?好,这是我们整体的一个思路啊,整体的思路啊,那接下来呢,我们在这边再凭着我们的印象把这个东西呢梳理把它写出来,对吧。
16:00
啊,根据这个内容呢,我们要去写一下我们整个的一个思路,对吧,好,那第一步。获取这些环境。那第二。啊,读取叫卡夫卡。DW。地藏下单。主题。数据对吧,好,那接下来呢。第三步。第三步对吧,嗯,转化为JS对象吧。啊,那第四步。按照。订单明细ID分组对吧?啊,那第五步。驱虫。订单明细ID分组以后做一个去重,去重好以后呢,接下来将数据转化为招聘就行。
17:08
啊,转化为Java对象。对吧,好转化为招聘对象。以后。啊,转化为招聘对象以后,我们将来干什么事了?找招聘对象以后我们要关联,首先关联SKU。Info为表吧。啊,咱们要关联SKU为表。把这个补充什么信息补充,嗯,PUID。Trademark ID。Category。三。ID对吧,我们要补充这个好,那这个补充好以后,我们就提取事件时间生成word map。
18:09
提取事件。时间生成。What?对吧,提取事件时间生成wordma,好,那么接下来。有了这个ma以后,我们就分组开车聚合对吧。就聚合好以后再次关联为表。就是关联。啊,嗯,PU。这个trademark。以及。Category。微表。补充相应信息。对吧,这个我就具体不写了,就是补充那个name呗,对吧,补充那些name字段啊好,那这个补充好以后,我们整个的数据呢,就完成了,对吧?嗯,那将数据写到。
19:19
启动是吧,好,这是我们整个的一个思路,没有问题吧,就是结合着刚才我们所聊的PPT里边来说的啊,其实这个需求当中呢,最难的还是这个啊。这个。当然这个东西呢,用工具类啊,我们在这边就搞定了,到下面就不难了,因为在这儿我们会把所有的事情全部搞定啊,到这儿来就。没有什么大问题了,好吧。好,那接下来呢,获取执行环境,读取这个,然后转为杰森,按照all detail ID分组去重。这个呢,我就。不写了啊,就不写了,因为跟我们前面写的代码呢,完全都一样,对吧,跟昨天所写的完全一样啊,就不写了,因为去种呢,我们都写过两次了。
20:05
嗯,那我就拿到。昨天我们所写的这个凹的window,就它对吧。就是这个啊。然后呢,我们。驱虫到这一步吧。保留第一条数据即可,对吧,一直到这啊把这个拿过来看C。这个全部替换掉。好。对吧,当然这边呢,我把这个消费者组得换一下,你不能用它了,你要用它的完了对吧。那两个人都一样了啊。DWS。交易日。优的用户SPU力对吧?订单业务线开窗啊来做处理,OK,那之后呢,这边我们也做了一个过滤对吧?之后按照DTID分组进行去重,然后保留第一条数据对吧?这个呢,是我们昨天所写的代码啊,都在这儿了啊好,那接下来呢,我们继续就拿着这个field点。
21:11
点,我们要把它变成一个招聘对象,那那就是。Math。啊,那是一个脉对吧,这边呢是一个类。首先呢,我们肯定要从这里边拿字段,所以呢,我们先把它变成一个,呃,啊不对,他已经是这个阶层对象了,对吧,我们前面已经转过了,哎,你这个直接粘过来了,忘了这个事儿对吧,那么此时呢,这个东西已经是一个阶层了啊。已经是一个接送对象了,对吧,因为我们前面已经转过了账,对吧?好,那接下来呢,我们最终要return。返回一个数据对吧,返回谁呢?就是刚才我们写的这个招啊,嗯,叫trade you PU order b对吧,点build,然后呢,点。接下来我们想一下啊,这里边我们要能够给的字段有哪一些。
22:05
对吧,能够给的资态有哪些啊,首先先来看,那这个地方窗口肯定给不了啊,Trademark呢给不了,这都关联为表的给不了对吧,那这个东西呢。得给。你得把all ID保留下来对吧,然后呢,SKID要给啊,这个要关联为表对吧,U的ID要有啊呃,这两个没有,这个不用给,这个是要去重以后才能给到对吧,也就聚合以后才有,那这个double奥特曼得给时间戳要有。啊,时间周要有,因为你转差品以后呢,嗯,咱们要根据这个时间戳去提取事件时间对吧,所以我们要给这字段呢,就比较清楚了啊在这边我们先把这个字段先写上,点那SKUID。对吧,点。User ID,然后呢,All the amount对吧?啊,这个要给,然后呢,All the ID set,这个要给,然后呢一个TS。
23:05
一个TS,那除了这个之外,那都是什么呢?都是呃,窗口的开始结束时间,然后呢,其他的。维度信息对吧,给不了没有没有一个都没有对吧?啊,那其他的维度信息呢,得到关联之后才有,那你的窗口信息呢,得到分组开张聚合以后才有。对吧,得在这一步之后才有,所以呢,现在我把能给的或者必须要给的都给上,其他都给不了啊啊SKD这个东西呢啊,那我们得去找一下前置位的那个表,对吧?在DWD层打开我们的凹的detail这张表。这个对吧?呃,找到这张表,因为我们要取字段了啊,第一个SKY在这,哎,就叫SKYD对吧,那这个问题就好解决啊,杰森object。点get stream SK ID对吧,第二个user ID来它呢,就叫什么user ID拿过来啊。
24:09
杰森。不点get string。叫UID,呃,All the amount,那咱们呢,还是用的这个double类型啊double类型所以呢,呃,咱们all the amount订单总金额,那就用这个切分之后的一个总金额,对吧,用它啊。这边节省。要点get double。对吧,啊,就是每一个订单明细的总金额啊,把这个拿过来对吧。呃,那all ID set这边呢,有一个set集合,且这里面放的是all ID对吧,所以呢,这个没办法了,我们呢,先在这有一个哈希。Set string,对吧。这个呢叫all的ids,接下来呢,这个all的ids当中啊,我们就添加数据点,那从Jason object当中点。
25:03
Get string,哎,这个地方呢,放all ID对吧,All ID呢,在这里面叫什么,就叫all ID对吧,拿过来啊。那就叫奥黛丽。啊好,那之后呢,我们把这个集合给他。好了对吧,那最后还有一个这个TSTS呢,我们还是一样的,得用到这个创建时间。对吧,啊,不要用那里边的它啊,不要用它,也不要用那个,呃,从mal拿过来的TS,这个我们已经解释过了,我们肯定用这个create time对吧,它是年月日十分秒,所以这边呢,咱们怎么写,就是date for my YouTube.to ts对吧,然后呢,从Jason object当中点get stream叫create time,对吧,把这个拿过来啊。呃,然后呢,添加一个。True对吧,Is for它是true,因为我们呢是年月日十分秒都有啊,都有对吧,你看这样就简洁很多了,如果说你没有这个构造者设计模式,写这个招聘,那你的字段。
26:10
要写更多,而且都无用。都是空空空空空对吧,从头空到尾一点用都没有。对吧,啊。好。看加倍得到一个的。User PU。对吧,哎,这样的话呢,咱们就把这个招聘就。搞定了啊,咱们把这个招聘就搞定了啊。
我来说两句