00:00
啊好了各位,那现在呢,我们看一下,呃,咱们倒数第二张表啊,这个叫做用户与用户注册事务时表,OK,那它所对应的业务过程很明显就是所谓的注册对吧?其实注册呢,家这个应该都很清楚知道什么叫注册对吧?但是这边我需要明确的一点是什么呢?就是这个注册啊,咱们这说的其实不够严谨,说严谨一点呢,应该叫做什么呢?应该叫做注册成功事务十秒对不对,因为就有可能是什么,比如说你打开的那个注册界面对吧?诶我输入了一些个人信息,但是我最终我没有去注册对不对,OK,那这样呢,我们统计他吗?我不统计啊,是我要统计的是注册成功的这样的这个事件,诶这个大家一定要稍微的注意一下,OK啊好,那这个业务过程呢,我们既然管它叫做注册成功对吧,那所以说它其实是有一点特殊之处的,这个特殊处在哪呢?啊,你比如说举个例子,咱们用注册跟前面的下单去做一个对比,那你说我一个用户能不能用有多条这个下单操作呢?有对不对,但是我这个注册这块呢,那就不能有了,对不对。
01:00
我一个用户是不是只能有一条注册成功的记录,对吧?还是有一点特殊之处的啊,这一点咱们搞清楚就行了,好了,那这这张表所对应的业务过程我们就算是清晰了,那接下来呢,我们就来分析分析啊,就是这张表咱们到底应该怎么去设计,我们先不去看这张表的结构,先不去看啊,那咱们现在自己分析分析,你说我这张表现在就让大家自己从头到尾再设计一下,对吧?这个应该怎么设计是不是,其实也也也主要是得先考虑一个问题啊,什么问题呢?就是咱们得分析分析,就是我们的设计灵感应该来自于哪对吧?啊OK,所谓的设计灵感呢,指的就是咱们这张表对不对,我里边的字段啊,或者说我里边的数据是不是来自于我们前面业务系统当中的哪些表啊,对不对,哎,应是这样一个逻辑,那大家想想,你说这张表咱们应该参考谁去设计啊。参考谁去设计,或者说这张表的数据将来来自于哪儿,这个其实还是取决于什么呀,还是取决于就是我们这张,呃,这张表所对应的一个业务过程,也就是注册成功对吧,会对谁产生影响嘛,对不对,那大家分析分析它会对谁产生影响。
02:07
注册成功会对谁产生影响?这是我们业务系统当中的所有的表,对不对摆在这儿了,OK,那他会对谁生影响呢?注册成功会对谁生影响?应该是用户表吧,U info,它会不会对u ino产生影响?应该是会长啊,就是用户表,这张表的结构大家应该很清晰,对吧?一行就是一个用户的信息,那列呢,是不是就是这个用户的各种属性啊,对吧,我们就不再去熟悉它的结构了,那这张表的变化逻辑应该是什么样的呢?它什么时候会IN3的一条数据,他什么时候会update啊,其实很简单,什么时候in inside0,就是只要有一个人他注册成功了,那是不是就得往这两板里插入一条新的数据啊,没没,没问题吧,那所以说注册成功会不会影响它?会啊,对吧?注册成功是会影响到我们user ino这张表当中的,在这张表的,然后影响的逻辑呢,是会往里边因色的一套新的数据,OK,好,这就是注册成功对这张表的一个影响,好,那既然我们已经找到了注册成功会影响到了表了,那所以说我们是不是相。
03:11
当就找到了我们这个注册成功事实表的这个设计灵感了呀,对吧,那我们这张表的字段,这张表的数据是不是可以来自于这张表对不对,但是你琢磨琢磨啊,如果我们只只是从这一张表里边去选择我们这个注册实时表的字段,OK,你会发现它可能有点问题,有什么问题呢?就是咱们这个维度信息会非常非常的少,对不对,你想啊,我们从这一张表里边儿去找我们注册成功的这张表字段啊,OK,能拿到维度信息,因为最终咱们要设计的是一个实时表,对吧,实时表是不是就是两部分字段,一问就是维度,一问就是度量了,对吧?那咱们现在就分析维度,这个维度会非常的少。为什么你想啊,找找半天找半天,你从这里边找的,其实就是最多就俩维度,一个维度就是什么呢?用户信息,这些所有的属性信息算一起,是不是算作一个用户维度啊,对吧?OK,好,那当然了,你要再找的话,还能再找一个,还能找到一个什么呢。
04:07
时间维度没问题,这是不是有一个注册的时间啊,相当于是没对吧,也就是说你要是用这张表去设计,只用这张表去设计我们的注册时表,那我们这张表俩就只有两维度,一个日期,一个是用户,对不对?那这个显然是有点少的,对吧?我们前面就讲过,在设计事实表的维度的时候呢,我们一定要怎么样来着,一定要怎么来着,一定要尽可能的去,呃,保证我们这个维度应该是丰富的才行,对吧?哎,这东西维度越丰富,那OK,我们这个将来能支持的指标就越多,对吧?这个大家都能想明白,但是呢,我们这儿,呃,只用这一张表去设计,这个显然维度有点少,对吧?维度少,那我们怎么办呢?那是不是可以想办法往里边再去添加一些维度啊,对吧,那这个维度咱不能随便加,对不对,得有依据才行,对吧?好OK,那你说我们另外的一部分维度,我可以从哪去获取呢?可以从哪去获取?
05:00
嗯,地区表,地区表能找到跟就是我们能直接找的,就是地区跟用户注册的一个关系吗?从这能看到吗?这是看不到的,对不对,OK哪我能找到,比如说我这个刚才同学提到的这个注册跟地区的关系哪能找到?日志能不能找?日志里边咱能不能找到,比如说注册跟其他的一些维度的关系,能不能理论上应该是可以的,为什么啊,因为大家都知道,就是当我们用户再去注册的时候呢,它影响到的数据可能不只有这一张表了,对不对?我是不是也可能会对日志产生影响,对不对?比如说我用户再去注册完成的时候呢,我可能会生成某一条是不是特定的页面浏览日志啊,没问题,因为正常情况下你要注册是不是得访问那个注册页面,没问题吧,你有注册页面,我是不是就会产生一条注册页面的日志,对不对?那我是不是也能从咱们的页面浏览日志当中找到能够代表用户注册的这种记录啊,对吧?找到之后,那是不是能从日志里边去拿一部分的维度信息吧,因为日志里边有一个common common当中是不是有各种各样的维度信息啊,对吧?诶,那里边咱是不是就能拿到,像刚才同学所说的,比如说省份呀,或者说这个什么,呃,其他的一些什么渠道啊等等这样的信息,咱是不是也能拿到啊,对吧?诶是这样的啊,OK,所以说在这呢,我们就。
06:23
考虑到啊,那咱们也应当从日志当中去获取一部分我们需要的这个维度信息,好了,那接下来咱们就来分析分析,怎样从日志里边去获取咱们想要的维度信息的,怎样获取呢?怎样获取呢?这边首先咱们得分析一下,就是将来我们这个注册成功,它这样一个业务过程对不对,会怎样影响咱这个用户行为日志来分析分析吧,到时候注册成功怎样影响我们的用户行为日志怎么影响。啊,首先你一个人对吧,他注册成功了,我这边用户行为日志会发生什么样的变化呢?他应该会生成一条特定的日志吧,对吧?那我生成的这条日志应该是什么样的呢?正常应该会有一个页面浏览日志对吧?那我这个页面浏览日志里边的这个页面ID应该是什么呢?
07:16
应该是就是注册页面吧,没问题吧,因为你要是去注册的话,你在页面上注册是不是得访问注册页面对不对,所以说你要是在页面上注册,肯定会生成一条注册页面的页面浏览日志了,这一点应该能够想明白对不对?诶然后呢,我们是不是就可以从那个用户行为日志当中去寻找这个注册页面的浏览记录啊,对吧?诶,那我就能拿到一条一条的这个记录了,OK,好,那我问一下大家,你说我们直接这样拿到的记录能不能就是,呃,就是直接作为一条咱们所谓的注册成功的这种操作记录,能不能不一定能,为什么呢?不是说我浏览的这个页面ID对不对,是注册页面就一定能代表一个注册成功的操作,为什么?因为我很有可能我只是浏览了一下这个页面对不对,我填了一些东西之后呢,我并没有真正的去点击注册,就这种情况下,我是不是也可能会产生一条这个页面ID为注册的这样的页面聊天记录啊,对吧,那所以说你直接这么拿不合适,那怎样。
08:16
拿才能准确的拿到注册成功的这种操作记录呢,那咱们就得分析分析啊,就是说我们用户他注册成功之后,那我这个页面浏览记录它会发生什么样的变化,那就完事了,对吧?大家都知道,那首先我注册的过程应该是什么样的呢?OK,我会在这儿呢,是不是浏览咱们这个注册页面啊,对吧?然后呢,我会往里边是不是填入一些个人的信息,对不对,填完之后我这儿会点击注册呀,对吧?你一点击注册,那我们前台或者说我们前端就会怎么样呢?是不是把这个请求发到我们的电商后台,对吧?那电商后台接收到你这个请求之后呢,他会怎么样,他是不是会为我们每一个用户去生成一个user ID呀,对吧?1ID通常是后台诶自动生成的,好生成完之后,它是不是就可以把这个user ID作为响应信息给我们返回到浏览器这边,或者是我们移动端的应用上来,对吧?好返回过来之后,那我前端的买点能不能拿到那个UID是不是就能拿到了对吧?能拿到他就可以把UID。
09:16
呀,是不是记录在我们那条日志上面了呀,对不对,OK,那既然是这样的话,那咱们是不是就可以根据这个是否有用户ID去判断这条日志是不是一个注册成功的操作呀,对吧?那如果他没有注册成功,那他生成的那个注册页面的日志里边肯定没有有的ID对不对,他拿不着嘛,没有注册嘛,对吧?那完了之后,如果我注册成功了对不对,从技术上来讲,我们是能够拿到这个UID的,没问题吧,那所以说我们这儿呢,就已经基本上明确下来了啊,我们到底怎样从日志里边去寻找我们所需要的那个,呃,什么东西啊,就是那个注册成功的操作技术怎么去找啊,首先得满足俩条件,第一个就是你的页面ID得是注册页面才行,第二一个呢,还得保证你的user ID不能为空才可以,对吧,这样我们找到的才是注册成功的那个操作记录所对应的页面浏览记录,诶这一点要给他搞清楚啊,好了,那截止到现在呢,我们就已经分析完了啊,就是说实际上呢,呃,我们要想去设计这个。
10:16
所谓的用户注册事务实施表对吧?或者准确的说呢,应该是用户注册成功事务实表对吧?那我们的字段,我们的数据的来源可以有俩对吧?一个是来自于业务系统数据库的user info那张表,还有一个呢,是来自于用户型日志,对吧?两边咱们都可以有对吧?那既然都可以有,那我现在问一下大家,你说我们应该以谁为主呢?对吧,你说将来我们去从里边拿分的时候,对吧,咱们以谁为主呢。这个应该以谁为主?琢磨琢磨大家,大家说应该以谁为主,我们是以表的数据为主,还是以日志的数据为主?其实应该以表为主,为什么要以表为主呢?这个其实道理很简单,因为表里边咱们有什么,有历史数据。
11:06
没问题吧,那咱现在表当中是不是已经有很多的用户信息了,对吧?只要有一个用户信息,是不是就代表一个历史上的注册成功的记录了,对吧?咱是有历史数据的,而日志没有历史数据,对不对?所以在这儿从这个角度去考虑的话,我们应该以表的数据为主啊,是这样的啊,OK,好,就是即便咱们不考虑历史数据,那我们也应当以表为主,为什么呢?因为表的数据要更可靠,它要比日志更可靠,对不对?为什么咱们来分析分析啊,咱们来琢磨琢磨,你说就是我们的买so当中数据库的数,数据库里边的数据啊,和这个用户行为日志,他们都是怎样一步一步的到达咱们这个数仓里边,都是怎样一步一步来的,我们先说这个所谓的用户的行为日志吧,日志首先咱们是通过前端买点获取的,对吧?前端买点前端指的是不是我们用户所使用的客户端呀,客户端呀,对吧?OK,好,那客户端可能是手机端的应用,也可能是这个PC端的页面,对不对?OK,那甭管是哪种在他首先得干啥呢?是不是得在它本地生成这个日志,然后他得发到我们的日志。
12:06
服务器啊,对吧,这个发送到日志服务器的过程当中,是不是需要经过网络的传输对不对?OK,假如说你使用的是一个移动端对吧?结,结果我现在这个网络不好,我没网,是不是就有可能会导致我这个数据没发过来,或者发送的过程当中出现了丢包的现象啊,对吧?那这种都有可能会发生,对不对?那所以这边呢,咱们要稍微的理解一下,所以说日志说实话咱们拿到的其实并不能绝对保证它是准确的,是这样的啊,所以说一般情况下,我们一些就是特别敏感的指标,对吧?尤其是跟那些金额相关的,对吧,我们要求特别准确的指标,这个一般你不能用日志去算,对不对,这个一定要注意一下啊,OK,那也是说用日志算,我们应该相当于就是得默许,它是有一定的误差的,这个要理解一下,好,那接下来呢,就是这个业务数据,业务数据它是怎么来的呢。它是我们经过什么呀,是不是经过Maxwell这个集群,呃,Maxwell对吧,去监控我们的blog,或者是使用data叉去同步这个买L的数据,然后呢,是不是写的什么卡夫卡呀,写到这个flow,写到我们的HD Fi群,它其实这一套流程我们都可以在什么的环境边完成的,我们其实都可以在我们内网的环境下完成。
13:12
没问题吧,是不是内网要相对来说要更稳定一些,更可靠一些啊,对吧?诶是这样的,这一点大家要稍微的理解一下,那所以说日志呃,肯定是要比我们的这个呃,业务数据要不靠谱的啊,业务数据相对来说更靠谱一些,所以说以后大家要是有这样的选择啊,诶也就是我某个表它的数据或者某个指标,我的数据既可以来自于买搜索这个数据库,也可以来自于日志,好那这时候我们肯定优先选择是不是来自于买搜Q数据库啊,对吧?这一点大家要理解一下,那当然呢,在咱们这儿呢,我们这个数据将来去去导的时候呢,我们也应该以买思货当中的数据为主啊,这个理解一下现在,那截止到现在呢,那咱们这张表的一个大体的设计思路就定下来了啊,就是这张表,将来咱们表的大部分的字段,诶,我们都是来自于这两部分,两部分数据的,一个是来自于表,一个来自于日志,那将来咱们这个数据呢,也是来自于这俩地方了,这个理解一下,那咱先接下来呢,就先来看一下最终我们这设计出来的这个表结构,然后再去写那个状载语句啊来先看表结构,来这边咱们CTRLC拿出来。
14:12
放在一个位置啊,咱们现在一起来看一下,呃,首先各位同学我们先来看一下这张表的这个表名,它叫做dwd user register INC,呃,这个register呢,是不是就是所谓的注册的意思啊,对吧?然后前面这个U指的是什么呢?是数据域吧,用户域,这是啊,好,那接下来继续下往下看,下面呢,我们就来明确一下,就是咱们这张表它的行列还有分区,先看行,那首先我们看它的行,这一行数据代表的应该是什么呀?应该是一个用户的一次注册成功的操作记录吧,对吧?OK,那刚才也说过了,一个用户其实就只有一次注册成功的操作记录啊好,那现在我们继续往下看,看一下它的这个具体的字段,字段有哪些呢?首先一个就是user ID,那还有一个呢,是时间对不对,这个时间呢,有一个呃,Data台ID只有年月日,还有一个具体的时间,呃,是这个年月日十分秒啊,这个理解一下啊好,那接来继续往下走,那下边这些这些东西都是啥呢。
15:07
China是不是那个渠道对吧,这个渠道应该是来自于哪的呀。日志的吧,对不对,说不日志当中我们才有渠道这个字段呀,对吧?好,那接下来句完子,那这还有一个provi ID,这个说实话也应该来自于哪也其实也应该来自于日志,但是我们志当虽没有prod,但是咱们有一个啥来着?Code,对吧?有个AR,这应该是来自于那儿的啊,也是日志,接着往下走,Version code的应用版本,这是不是也是日志啊,对吧?好,继续往下走,Mid brand modelism这些其实都是来自于日志的吧,对吧?OK,你会发现,诶,我们是不是从日志当中获取了很多的维度属性,用来丰富咱们这张表的字段呀,对不对,那你维度越多,将来我们能算的指标它就越多了,比如举个例子啊,那现在呢,我将来我就可以算什么指标了,我是不是可以算一下,比如说各渠道的注册用户数啊,对不对,你要是没有这个维度信息,你能算这个指标了,你你算不了对不对,这个大家应该是理解,需要去理解一下了啊行了,那截止到现在这两本的字段咱们就搞清楚了,诶一部分是来自于业务表,一部分是来自于日志了,好了,那完成之后我们继续往下分析,咱们来明确一下它的,呃,这个分区规划啊,这两本分。
16:13
规划应该什么样的呢?是不是应该是INC也是增量分区啊,对吧?那这张表当中我们将来应该是每行每个分区放的应该是一个什么呢?是不是就是当天的新增的那个注册成功的记录啊,对吧?诶这个大家要稍微理解一下行了,那这张表的表结构咱们到现在为止就是分析完了啊,来视频我给他停一下。呃,好了各位,那接下来呢,我们就来看一下它的数据装载应该怎么做,呃,数怎么做呢?还是老规矩,咱先得分析什么来着,先得分析一下数据从哪来,数据的流向对吧?这个表数据从哪来呀?刚才分析了,其实应该是来自于两个地方,一个地方是买SQL当中的user表,还有一个呢是用户行为日志,对不对?那这两部分我们以谁为主来着,是以买SQ表为主,对吧?因为在咱们这儿呢,买SQ表是有历史数据的日志,没历史数据对不对?那所以说我们得从买以买SQ表为主,好那接下来呢,我们来分析分析到底怎样去拿到我们这儿想要的每个注册成功的操作记录,OK,那现在我们先来看一下买思Q这张表,这就是买思Q表对不对?OK,那你会发现买思表当中实际上是有很多的历史用户的,有历史用户就意味着怎么样我们能拿到是不是历史的注册成功的操作记录,对吧?我这一行数据是不是就代表这一个人在原来的某一天里边,他是不是注册成功了呀,是是是是这个道理吧,同学们,OK,也是在这儿咱们是能拿到历史的注册成功的记录,既然能拿到历史的成功记录,那我们就需要干啥,是不需要在第一天的时候对这些历史的注册记录做一个统一的初始化的。
17:46
处理啊对不对,OK,这是第一天的时候对不对,那OK,那到了第二天呢,还用处理历史数据嘛,不用了,那我们就需要是不是只处理当天的数据就完事了,对吧?所以你会发现那这张表它的首日跟每日的处理逻辑是不是又不一样啊,不一样,那我们就得写两个三才行啊,这一点要注意,那所以接下来呢,咱们现在先写首日的数据状态语句,来我们一起来看一下这个首日咱怎么去做啊。
18:10
来,那现在我们就直接开始写了啊,那首先呢,我们应该是select一下,然后from from哪张表应该是ods层的,是不是userc啊对吧?这两边我们做的是增量同步,那首先呢,我们先过滤它的第一天的分区,零六杠幺四,注意这个是咱们的首日啊,刚刚我来一个首日,首日咱们假定当前的日期是不是就是六月14啊对吧?好,那现在我们继续拿走,那现在我们从这张表当中拿到的数据是什么样的呢?来我们先查一下走,它应该是这样的一个结构,对吧?我们首先得先过滤一下啊,还是得把那个是不是type等于这个BOO in的类型的给它拿到了,对吧?诶,然后刚in的好,我们先把这样的数据拿出来,拿出来之后呢,你你要注意观察,这里边现在每行数据跟买思和表当中的这这个表对吧,每行数据应该是一样的吧?OK,好,那现在问题来了,我们怎样从这样的数据当中找到我们想要的那些历史的注册记录,这一行数据能不能代表一个注册记录?
19:07
能吧,对不对,因为咱们知道是不是只有注册成功了,我们才会往这账本里插入一行数据啊,对吧,那所以说我们从这是能够找到我们想要的一个一个的注册成功记录,一行就代表一个注册记录,所以在这儿呢,我们只需要怎么做,把这张表的数据是不是全部查出来,那就完事了呀,对吧,那你需要哪个字段,咱们就拿哪个字段就行了,好,那在这里边我们拿哪个字段呢?其实能拿的字段很有限,对不对,因为我们这张表最终几乎大多数的维度都是来自哪,都是来自于日志的吧,对吧,我们能从用户表里拿的字段只有啥U的ID能能呢?啊,应该是date点是U的ID还是ID啊,咱看一眼是ID对吧,ID咱是可以拿出来的,对不对,那还有谁呢?再有就是这个日期了吧,对不对,咱只能拿这俩字段,别的咱是拿不了的,比如再拿一个date点,哎,Create time对不对?那这样一来我们相当于就拿到了我们需要的这俩字段了啊,是这样的啊,字段非常少啊,OK,好,那剩余的字段我们只能怎么是不是从日志里边去拿呀,对不对,OK,所以说我们接下来是不是还得再写一个查询对不对,来一个select,然后呢,我们让一下哪张表呢?应该是ods层的,是不是lock INC呀,对吧?好,那完之后我们来一个过滤,应该是DT等于2020杠零六杠幺四没问题吧?好,那接下来呢,我们需要从里边选一下我们所需的这个,诶,各种各样的信息,好,那看一下咱们这都需要哪些信息啊呃,Channel,然后呢,还需要一个,也就是那个AR对吧?OK,那咱需要哪个,咱就拿一个,这个应该是位于commons端里边的对吧?Common里边China应该我写的是CH,那呃,这个呃,Every code我写的是AR,那还有一个是common点什么看一下,呃,这个应该是version code对吧?这个我写的应该是诶,VC对吧?那这呢,来一个common common上面是什么?
20:47
是mid对吧?哎,然后BA啊,咱们一个拿一个是mid,那再来一个这个common点,呃,应该是BA啊,然后呢,Common点还有一个什么MD对吧,型号,那还有一个common点是不是OS操作系统啊,对吧?OK,那这样一来,我们所需的这些维度信息,咱基本上就已经拿到了,好都拿到了好,那接下来呢,我们需不需要对这个数据进行进一步的处理呢?得需不需要处理啊,显然是需要处理的,对吧,我们只要什么样的数据啊。
21:16
我们只要那种注册成功的操作所对应的页面浏览记录吧,对不对,OK,那所以说咱们接下来得干啥,是不是做过滤啊,对吧,那怎么过滤呢?应该是来一个and and里边来写啥呢?首先你得是一个页面日志才行,对不对,而且你的页面ID还得等于什么。还得等于那个注册页面是不是才行啊,对吧?所以在这儿呢,我们应该这么去写啊,因为直接来一个配置点,是不是配置下划线ID等于那个注册就完事了,对吧?注册页面的页面ID是什么呢?这个其实是什么?是不是由我们自己模拟生成的那个配置文件决定的呀,对吧?来咱们去看一下啊,我进到OPT model进到log,然后呢,咱们打开那个passor杰森这个文件,大家还有印象吗?这个是不是咱们可以自己去配置我们一个用户访问页面的路径啊,对不对,OK,大家注意观察,我这特意的去设计了一个路径啊,咱们看这个。
22:08
大家看一下这个,那这个你看它的访问路径是什么样的啊,首先刚进来之后浏览的是首页对吧?之后呢,搜索,搜索完之后呢,是商品列表,之后呢,进到了商品详情,好,那接下来呢,我想去对它进行加购,结果发现我没有登录,对不对?那所以说现在需要去登录,结果登录的时候呢,我发现我还没有注册对不对?完之后呢,就需要去进行注册了,好,注册完毕之后自动登录,自动登录之后是不是就又回到了good detail这个页面,然后继续加购交易支付就完成了呀,对吧?是这样的一个对方,所以说那注册页面的ID实际上的就是这个,所以在这儿呢,咱们把它给它复制一下,然后拿过来放在这个位置好了,那这样一来,我们就拿到了所有的注册页面的浏览记录了,但是我们前面提到过,不是所有的注册页面的浏览记录都对应注册成功的操作,对吧,我们还得保证另外一点什么点来着,是不是得保证那个common里边的UID它不能为空啊,对吧,应该是is not not,这个一定要注意,哎,OK,好,那这样一来的话呢,我们才拿到了咱们。
23:09
所需的这样的注册成功的页面浏览记录好拿到之后呢,我们一会儿需要干啥,是不是得用它跟上边儿得去做一个关联呀,对吧?好,那现在问题来了,大家说我们关联用哪个字段关联呢?是不是要用U的ID关联对不对,我是不是应该把就是同一个用户的注册记录对不对,跟我下边的这个页面浏览记录是不是进行关联才行,对不对?OK,那这个一定要注意,所以在这儿呢,我们应该再多选一个字才行吧,对吧,我应该选出来common里边的UID才行,对不对,那这样一来他俩才能够完成这个照操作我用UID去join上面的这个ID,那就完事了,好了,那这样一来两个子查询就都写完了,但是都写完之后啊,一会儿咱们在做join的时候,肯定会出一个问题,大家应该能想象到出什么问题吧,会出什么样的问题。对,这个是有历史的注册记录的,对吧?你注意观察一下,咱们这直接回车,你看这里边是不是有十号的,有11有12等等都有啊,对吧?但是咱们这边其实你能拿到的是料什么,只有十四二的注册成功的记录,这个没办法,因为我没有历史数据嘛,对吧?那所以说一会儿他们俩去转的话,肯定会出现这样的一个情况啊,OK,左边是全部的用户的注册记录,右边只有14号这一天的用户的注册记录,那所以说我们肯定会出现什么呀,这这种就是对不上的一个人,这个情况呢,不对,那我们这儿以谁为主呢?是不是应该以左边那个为主啊,对吧,咱得保留所有的历史注册记录,对吧?那所以我们得用left照对吧,那你用left站的话,那这儿是不是肯定会出现大量的空值啊,对不对,出现空值这个也没办法,因为我们确实没有嘛,对吧,没有我们就诶直接就这么放着就完事了,对吧,咱们也不用给他初始值导这个注意一下就行啊,完了,所以最终我们需要给他进行一个哎left draw的操作,呃,这个他俩left绕完之后,那我还要不要跟其他的表draw呢?其实需要还得跟谁绕一下地区表,对吧,咱得拿一下pro。
24:56
ID对吧?诶,这个其实大家应该是能想到了,呃,所以这个子查询呢,我就不再写了,比较简单啊,好了,那完了之后仨子查询都写完,你一照,然后呢,取我们想要的数据,那就完事了,当然取到之后你要知道我们这儿最终返回的结果是不是应该会有历史上每一天的注册成功的记录,对不对?所以说我们往表里边iner的时候,你干啥?动态分区对不对,这个应该是能想到的啊,这个我就不在这样写了,咱们直接把文档当中的最终的答案拿出来,咱看一眼就行了啊来,CTRLC,那这个呢,我给拿过来,放在这个位置CTRLV,好了,同学,那这就是我们最终得到的一个,相当于是首日装载的语卷,我们最终看一眼吧,来,那首先看这个,这个跟刚才我们所写的是一样的,对吧?呃,取这个U的这张表的14号分区对不对?然后呢,取U的ID和cur time就完事了,那接下来往下走,那这边呢,取我们ods层的日志表当中的页面为那样一个记录,然后呢,还得保证UID不为空的记录,对不对?取到之后呢,自动该选的选,那完了之后呢,进行最终呢再跟这个。
25:56
地区表进行一个照,最终往上走,诶往上走那就能拿到我们所需的这些字段了,那然后呢,需要进行动态分区,这个动态分区的值用谁呢?是不是就用我们从业务表拿到的cur time去作为动态分区段的值啊,对吧?哎,这个比较简单好了,那这样一来我们就能够将我们所需的数据写入到这张表里边了,哎,这就是咱们的首日状态啊,这个三克呢,其实说实话不难,对吧?啊完之后呢,就是可能这个数据它稍微有点别扭,这个没有办法,大家需要注意一下啊好了,那这样啊,我把这个三克呢给他执行一下,然后呢,我们看一下,就是最终这个数数据写到这张表的,呃,之后的一个状态啊来,我先把这个表建出来,那之后呢,把这个首日的装单语句给它执行一下,嗯,啊,当然执行的时候他会发会发现他会报错啊,这个报的是什么错啊。
26:39
是不是还是动态分区的一个问题啊啊,这个由于咱这个参数之前是在呃这个界面去set的,对吧,咱们没有配置到那个那个have set里边,所以它是只在会话内有效嘛,对吧?来咱这个再执行一遍就行了,这边我们再ins一下,稍微等一下啊。呃,由于刚才我们是不是切了一下引擎啊,我们刚才是不是切到了那个SPA引,呃,MR引擎对吧,切到二引擎,它那个SPA引擎就会自动关闭,那个SPA啊,就自动关闭啊,所以现在咱们再跑circle,相当于它是怎么做呢,他会再重新开,诶这个完了,我们刚才没切过来啊,我们只是切到了MR,是不没切回SPA呀,对不对,也没关系啊,让他自己跑吧,这个MMRSPA这个结果其实都是一样的啊呃,先等他跑跑完吧,跑完之后我再给他切回SPA,呃,我看他跑到哪了,现在。
27:26
呃,还在跑啊,稍微等一下吧,这个确实稍微有点慢啊,Map跑到了100%reduce完应该是快完事了,已经OK了对吧?好,那现在数据是不是理论上应该已经写到了我们这张表的多个分区了呀,对吧?那现在我们查看一下,看是不是多个分区啊,我们来执行一个show啊,后边的partition加上这张表,然后走诶,多个分区这个是没有问题的,对吧?然后里边的具体数据有没有问题的,咱们去看一眼啊,找到刚刚的这张DWD层的这个实施表,应该是DWD层的用户域的对吧?然后register INC对吧?哎,然后你看咱们根据数据域去找,是不是很快直接找到数据域对不对,找到这张表啊,这个体会一下这个数据域的作用啊,好,那现在咱继续来走,那现在这张表的数据就已经呈现在大家的面前了,你看这里边没有没有显示全啊,这边呢,咱们把这个全部都显示出来,呃,点一下这个哦。
28:16
好数据就呈现在这儿了,但是呈现在这之后,大家琢磨琢磨,他好像跟我们预期的时候不太一样。对不对,你看注意观察这个日期,这是十号的对不对,然后你往下走。这是11的,然后你再往下来到这儿看到14。这14的哎,你会发现这个数据是不是跟咱们预期的不太一样,有没有同学意识到这个这个异常啊,意识到了吧,就是理论上啊,咱们应该是结果应该是这样的,就是我们十到13号对不对,那应该是什么什么样的情况的,就是它只有业务数据是没有日志的,所以理论上十到13号注册的这些用户,他后边的这些来自于日志的维度属性应该都是空,没问题吧,然后呢,咱们这儿看到了,有些是空,有些不是空,对吧?然后呢,理论上我们14号那一天的所有的注册用户,那它后边的来自于日志的那些维度属性应该都不为空,但是我们看到的现象是什么呢?也是既有空的,也有不是空的,对不对?诶这是怎么回事呢?这个我需要给大家解释一下啊,这个首先并不是我们S写的有问题,这是咱们数据有问题啊,咱们数据有什么问题呢?咱们回忆一下啊,就是我们的业务数据和日志数据咱们是怎么生成的呀,是分开生成的吧,是两个独立的炸包,它俩没有任何关系,对不对?所以实际上我们这。
29:32
两门的数据呢,它是对不上的啊,但是在生产环境下,那你想一想,这两门数据应该是能够对上的吧,对不对,啥意思啊,就是我这儿有一个这个注册成功的操作,我会同时往MY搜的U点表里插入一条数据,同时生成一条咱们规定的那种日志,对不对?诶,OK,那它是能够对上,那咱们这儿其实这个数据都是随便生成的,随机生成的,所以就会导致这两边都对不上啊,这一点大家要稍微的理解一下啊,OK,好,这是咱们这个数据的第一个问题,其实你再仔细观察,你会发现这个数据还有另外一个问题,有什么问题呢?来,那现在呢,我们先去看一下这个,呃,我们业务系统当中买circleql这张表里有多少个用户啊,那实际上我们这边有多少个用户呢?咱们看ID就行,这个ID我们就是从一,然后呢逐渐递增的,你后来到底下一共有多少呢,1000,那这个有没有翻译,因为我们这儿呢,可能会翻页对吧?来我们翻一下页啊翻了吗?没翻咱只有一页对吧,那就说明咱这张表是不是只有1000条数据对不对,然后理论上按照我们之前的规划啊。
30:32
诶,是不是一个用户只能有一条注册成功的操作记录,理论上应该是这样的对吧?那所以说你想一想,咱们这张实时表应该有多少行数据才对,是不是就是1000条才对,但是你发现这里边并不是1000条,而是1002对不对,这个又是怎么怎么回事呢?对,也是因为这个啊,就是你想一下,理论上啊,就是我这个,呃,正常情况下咱们这儿呢,呃,不出问题的话,这应该是1000对吧,但是它之所以变成了1002了,那肯定是出现了什么样的情况。
31:01
肯定是出现了一个用户有多条那个注册记录吧,是涉及到说不肯定出现这种情况,咱是不是还会出现这个问题啊,对吧?好,那这个问题是怎么出现的呢?业务数据咱们是没问题的,出现问题还是出现在日志上面的,这里边肯定是出现了什么样的日志啊,他给我们生成了一个用户的两条注册成功的记录,没没问题吧,OK,那这样一来的话,我们这边跟这边一照,是不是就会出现这样的一个问题啊,对不对,也就是我买soql当中有一个用户有一条数据结果在日志里边呢?哦,OK,有两条数据跟他对应上,也就是他俩U的ID是同一个嘛,对吧,然后呢,他俩一关联,这个结果是几条啊,是不是就是两条嘛,对不对,那所以说会出现这样的一个现象,那所以这个数据呢,确实是存在问题的啊,但是咱们三份逻辑没问题就OK了,这个大家稍微的理解一下,那在这儿呢,我先给大家把这个数据看一下,省得大家自己看到这个数据之后,他就呃不知道咋回事就懵了啊行了,那这个完成之后,视频我给他停一下。啊,来吧各位,那现在我们看一下它的每日状载,每日状载呢,跟首日的最大的区别就是我们不再需要去考虑历史数据了,对不对,只需要关注当天的数据就行,那我们现在要关注的应该是什么呢?是不是应该是当天,也就是到了第二天,比如说15号这一天的注册成功的记录了,对吧?咱们只要能把这一天的找到,那就OK了,来那接下来呢,咱们来分析分析这一天的怎么找啊,一天怎么找,是不是跟首日应该是差不太多的,这个整个结构应该是一样的,对吧?那我们这儿呢,就是直接基于它进行改造就完事了,来咱们稍微的调整一下啊呃,这边呢,我先把这个日期改成15,首日改成诶每日来,那现在我们还是先从子查询开始改起啊来吧,咱一点改啊来,先改第一个子查询,第一个子查询是不是来自于O呃,OSU这张表对吧?好,分区首先是不是得改成15号对不对?OK,那完了之后呢,大家要知道15号的时候这张表我们拿到的应该是它的inert和安的操作对吧?那注册成功对表的影响肯定是什么inert,所以说我们这儿是不是只需要拿inert类型的就。
32:59
就OK了对吧,这套大家应该已经很熟了,对吧,直接删除好了,那这个是不是相当于就要改完了呀,对不对,好搞定下一个看这个这个怎么改。
33:09
这个怎么改,这个是不是只需要改一下日期就行了,别的运动吗?不用,这个其实非常简单,是这样的啊,所以这个呢,咱们只需要改成15那就OK了,OK啊好,那在生产环境下啊,OK,你这回这两边的数据能不能对上,生产环境下应该是能够,生产环境应该能对上了,对吧?那这边是15号的注册记录,这边有完整的15号的日志,所以这边不再存在说什么照完之后还是空的现象了,对吧?只有历史数据,咱们可能会出现照之后为空的现现象,当然我说的生产环境,我们当前这个环境,你一会儿照一照还是可能为空啊,这个理解一下,因为两边还是没关系的啊,行,接下来继续往下进行,呃,这个完成之后改这个,这个是不是也是只需要改一下这个日期15就完事了,对吧?别的就不用动了,好了,子查询都改完之后,那上边呢,我们再调整一下动态分区,首先咱们需要删除这个不用了,呃,然后呢,这儿是不是指定一下15号的分区就OK了,2020杠零六杠幺五,诶那也就完成了,诶这个每日装载就OK了,哎,视频我停一。
我来说两句