00:00
好,那接下来我们看DWT层用户主题表的数据装载啊,那同样呢,我们也是先来看一下它装载时的数据走向啊,那由于呢,这一层每张表数据装载的逻辑都是相同的啊,那所以在这呢,我们也是统一的看一下就可以了啊好,现在我们打开这个PPT一起来看一下。好,大家注意观察一下啊,上边指代的是DW层的表啊,那实际上这就是T层表的数据来源啊,这个要注意一下啊,好,那下面呢,指代的就是DWT层的表啊好,那现在假定就是2020年6月14号对吧,就是咱们书仓的第一天来我们现在看一下啊,在第一天的时候,我们能够从DWS层拿到哪些数据,来我们看一下。诶,是不是会有多个分区啊,为什么会有多个分区啊,那因为我们之前往DWS层进行首日装载的时候,是不是使用动态分区把历史数据初始化了一下啊,对吧?那所以说在这儿我们能拿到多个分区啊,OK,那咱们拿到这些数据之后应该做哪些处理工作呢?OK,咱们来思考一下啊,那DWT层保存的是什么?是不是累积值啊,对吧?那什么叫累积值?那所有的数据累加到一起是不是就是所谓的累积值啊,没错吧,那所以说第一天的时候呢,我们需要读取DWS层全表的数据啊,把全本的数据做一个统一的汇总啊,汇总完之后我们就能得到每个人的累积行为了,对吧?那得到之后呢,咱把这个结果放在哪?是不是就放到DWT层当天的分区里边就可以了,对吧?也就是6月14号啊这个分区当中啊,OK,那这就是我们首日装载的逻辑啊,其实比较简单啊,好,那随着时间推移呢,来到了第二天,也就是6月15号,对吧?啊,OK,我们来看一下啊,6月15号我们能够从DWS层获取什么数据,来一起看一下啊,大家注意观察,6月15号的时候呢,DWS层会新增一个分区对吧,那这个分区里存放的是啥呀?
01:51
那是不是就是6月15号这一天的各维度对象的汇总行为啊啊,没错吧,OK,那好,那咱们拿到这一部分数据之后,我们又应该做哪些处理呢?
02:02
啊,对吧,也就是说我们每日装载的逻辑应该是什么样的呢?来大家跟我一起思考一下啊,那你说我们进行每日装载的时候,能不能采用和首日装载同样的逻辑,可不可以?那具体怎么做呢?其实很简单,那咱们是不是可以把这个从开始到15号的这一天的所有的分区的数据,然后呢,进行一个统一的汇总,那汇总完之后,那咱们得到的是不是就是截止到6月15号的累积汇总行为。没错吧,啊,那咱们把这个结果呢,再给它写到呃,DWT层十五二的分区是不是就完事了。没错吧,那我们这样做的话呢,这个结果肯定是没问题的啊,但是呢,这个计算效率不太高,为啥呢?你想一想啊,那如果说我们每天都像首日装载这样去做,那你想一想,这里边是不是会有很多的重复计算呀,对吧?啊,那显然我们进行每日装载的时候呢,不能这样去做啊,那咱这到底是怎么做的呢?那咱这儿呢,是这样去做的啊OK,我们进行每日装载的时候呢,首先需要先拿到截止到前一日的累积行为。
03:05
OK,那然后呢,再拿到诶今天的,哎这个汇总行为,那完了之后呢,哎,我们把今天的汇总行为,那加到截止到前一天的累积行为上边,那这样一来咱是不是就能得到一个截止到今天的最新的累积行为啊。没错吧,也就是咱需要去这样去做,诶这就是我们每日装载的数据走向啊,OK,那后续每天呢,咱们都是这样的一个操作,OK,那接下来我们再来看啊,到了16号的时候,咱们要做哪些工作,OK,那继续。16号呢,那咱们是不是又会新增一个分区啊,对吧?那我们应该怎么做呢?我是不是应该拿到截止到15号的累计行为,然后呢,再拿到今天的这个汇总行为,那他俩进行累加,那是不是就能得到截止到16号的累计行为啊。没错吧,然后大家要注意啊,得到这个累积行为之后呢,我们还有一步要做哪一步啊,诶,就是清理DWT层的历史分区,因为我们前面分析过啊,就是DWT层呢,我们没有必要去保留全部的历史数据,对吧?啊,所以在这儿了,我们会清理一下原来的分区,那我们前面也提到了啊,最终DWT层呢,我们只会保留最新的两个分区,对吧?那就是在这儿呢,我们只需要保留15和16对吧,那14号的分区的哎,就需要清理掉。
04:19
啊,OK,那我们再继续往下走啊,来到了第17号的时候呢,诶,我们是不是也是拿到16号的累计行为,再拿到17号的汇总行为,他俩进行累加对吧?那加完之后呢?诶,我们还需要再做一步干啥?是不是清理15号的分区啊OK,那后续每天呢,都是这样的一个逻辑啊好,那DWT层数据装载的走向,哎,我们就说完了,好,那接下来我们就开始写circle考啊,来打开data啊。那咱这张表呢,也是分为首日装载和每日装载啊,咱还是先看首日啊,好,那接下来我们就先来分析一下首日装载的具体逻辑啊,好,我们先明确一下啊,就是咱的数据来源应该是哪张表。那是不是肯定是DWS层的用户主题表啊,对吧?而且我们需要的是全表的数据啊,那全表现在是不是有多个分区,这是为啥呀?诶,因为我们初始化的时候是不是使用了动态分区啊啊OK,那这就是咱现在的数据来源啊,那接下来我们再继续往下进行,那下边呢,我们再明确一下啊,就是DWT层要求我们统计的值,哎,具体有哪些,那他要求我们统计的是不是有最近一日的聚合值,最近七日的聚合值,最近三十日的以及从开始至今的聚合值啊。
05:29
嗯,没错吧,啊,那这些值呢,我们需要分别去统计啊,那具体的统计思路应该是什么样的呢?啊,其实很简单啊,比如说我现在要算最近一日的聚合值,那咱们是不是只需要从DWS层获取最近一日的分区,也就是这个对吧?把这个结果直接拿过来是不是就可以了?没错吧,那最近七日的聚合值呢?那我们是不是就得从DWS层获取最近的七个分区啊,对吧?啊,然后呢,把这最近七个分区的数据给它聚合在一块儿,那我们是不是就能得到最近七日的聚合值。
06:02
没错吧,那同理,要想算最近三十日的聚合值,那我们就得从DWS层获取最近30个分区啊,那如果说我们要算的是从开始至今的累积值呢?那是不是就需要全表的数据了呀?没错吧,那这就是我们首日装载的时候了,具体思路好,那接下来咱们就开始写circle了啊来,我们先统计最开始的几个与登陆相关的字段啊来咱们拿一下这几个字段啊,应该是从从这儿到这儿对吧?来CTRLC啊,F3来定在这个位置,好那接下来咱们开始写circle,那首先哎,Select,然后呢,From应该是D层的user action对吧?咱们需要的是全面的数据啊OK,那接下来呢,那接下来咱是不是得分组对吧?为啥?因为我们现在要统计的是每个用户的累积行为,对吧?啊,没错吧,那所以说我是不是得按照用户,也就是user ID进行分组,没错吧?那所以葛user ID OK,好,那接下来呢,我们就可以去分别统计我们所需的这几个字段了啊,咱一个个来啊,那首先呢,是这两个日期对不对啊,这两个日期咱先放一放,一会儿咱再求啊,我们先求下边这个典型的累积值啊,那接下来我们看第一个啊,第一个呢是最近一日登陆次数对吧?嗯,那这个应该怎么求啊?
07:15
啊,就按照刚才我们的分析呢,在那只需要从DWS层的用户主题表的最后一个分区当中获取它当日的登录次数是不是就可以了。没错吧,啊,其实很简单啊,但是大家要注意一下啊,我们现在读取的是不是DWS层的全表啊,而我们现在是不是只需要一个分区?没错吧,哎,那这应该怎么获取呢?那咱是不是可以用sum if啊,对吧?那sum if具体怎么写呢?来我们一起来写一下啊,那首先我先把这个user ID给它选出来,然后继续啊sum if啊,If里边应该怎么写?咱这么写判断日期啊,如果日期等于咱们的最近一天,最近一天是不是就是六月14对吧?2020杠零六杠幺四,那我就怎么做,那我就把他的login count拿出来,否则的话呢,我是不是就按零去计算呀,对吧?那这样一来是不是我们相当于只对6月14号的登陆次数进行了求和,其余的是不是都是零啊,没错吧,那我们得到的结果,那是不是就是6月14号的登陆次数,也就是这个所谓的最近一日的登陆次数。
08:17
没错吧,OK,那第一个值我们就取完了,那我们再来看第二一个啊,第二个字段呢,是最近一日的登陆天数啊,对吧?那这个字段的计算逻辑与第一个字段应该是很像的啊,在这我们也需要使用sum if啊,因为我们现在读的仍然是全表,对吧?啊,那具体的判断逻辑应该是啊。还是根据日期判断就可以了啊,如果日期等于6月14号,那OK,我就按一天去算对吧?那否则的话呢,是不是都按零算呀?啊,当然那个最近一日的登陆天数,咱们计算出来的结果呀,是不是要么是零要么是一啊啊OK,那接下来我们把这个去写一下啊啊,那现在我们直接CTRLD往下走就行了,那这边怎么写,还是这个判定条件,只不过我们返回值就不再是log in count了,而是啥呀,而是一对吧?啊那这样一来我们就能够求出来最近一日的登陆天数了。
09:08
好,我们继续往下看啊,那接下来呢,是最近七日的登陆次数和登陆天数啊,那这两个字段应该怎么求呢?啊,实际上这两个字段呢,与最近一日的求法是一样的对吧?啊,我们只需要把它的判断条件改一改就可以了啊OK,那我们来改一下啊来,先把这两个字段复制一下CTRLC来放在这CTRLV啊OK,那我们来改啊那具体应该怎么改呢?其实很简单啊,我们只要把这个DT等于零,六杠幺四改成什么?改成date塔大于等于什么呀,大于等于我们最近七天内的第一天的日期是不是就可以没错吧?那应该怎么获取第一天日期啊,是不是应该是data I的,然后把当前日期诶放进去,完了之后呢,得减一个日期对吧?减几注意啊,是减六而不是减七啊,这个大家得搞清楚啊好,那这改完之后,下边是不是也是同样的改一下就可以来CTRLC咱们给它改一下。CR为啊,好,那最近七天的我们就搞定了啊,那紧接着呢,我们再继续往下进行,再往下应该求的是啥?是不是最近30的登陆次数和登陆天数啊,那是不是同样道理没错吧?那所以说我们在这儿也是直接改一下就行,来CTRLC拿过来,来CTRL为放在这儿,好,那在这儿呢,我们只需要把减六改成减几,是不是减29就可以了。
10:19
没错吧,改成减29,那好,那最近三十日的两个值我们也算完了啊,那接下来最后啊,是不是只剩下诶两个累积值了呀,对吧?一个是累积登录次数,一个是累积登录天数啊,那这个累积值我们是不是需要把全面的数据都汇总到一块儿,那所以在这儿呢,咱们还有必要去做sum if嘛,是不是没必要了,干啥呀?是不是直接进行sum求和就可以了?OK,那接下来我们去统计一下啊,我们先统计这个累积登录次数啊,那这个怎么求,是不是直接sum求和就可以?Sum完了之后呢,Log count,那这下来我们相当于把每个用户每一天的log count是不是都加一起了,对吧?那咱得到就是累积登录次数了,那OK,那接下来我们再看这个累积登录天数应该怎么求?
11:00
这个那么久,但这个比较简单,这个呢,我们直接是不是count星就可以cot count星就可以了啊OK,那这样一来我们得到的就是啥,就是每个用户他的累计登录天数啊,为什么在这儿用康乃芯可以啊。来咱们分析一下啊,首先我们就要先明确咱现在读取的数据是哪个表的,是不是DWS层user action day抗这张表的呀,没错吧?啊,那现在呢,我们是不是读取了这张表全表的数据啊,那也就是说我们读取了它的全部分区的数据啊,那你想一想啊,是不是每个用户。他在每天的分区里边,是不是最多只可能有一条数据出现呀。对吧,我不可能说在一个分区里边有两个相同的user ID,那他为啥呀,因为我们把一个user是不是它的数据都汇总到一行里边去了呀,对吧?那所以说在每个分区当中,每个user最多是不是出现一次啊,最多一次,最多一次,那所以说我们在这儿呢,是不是只需要数一下每个用户一共有几条数据,那就代表着他一共活跃了多少天呀,对吧。
12:03
对吧,那数多少套数据是不是用count没错吧?那所以在这儿呢,我们就看得清,就能统计出来每个用户的累计登录天数啊,那有的同学可能会想到啊,那所谓的首次活跃日期那就是啥?是不是就是这个用户他所有的活跃日期里边的最小值啊。对吧?那末测活跃日期呢,是不是就是所有的活跃日期里边的最大值没错吧?那所以我们要这么想的话,那其实就简单了,我们在这儿是不是只需要求一个最大和最小值就可以了,对吧?那ma里边呢,来一个DT,这就是首次活运日期,那max max,对吧,再来一个DT,那这就是末次怀孕日期。OK,那这样一来的话,是不是与登录相关的统计咱们就做完了呀。对不对啊,那咱们这么做完之后会不会有什么问题啊。会不会有什么问题,咱们来分析一下啊,那我们先来明确一点啊,那就是我们与登录相关的这些统计都来自于什么数据啊。是不是都来自于用户行为日志啊啊,那用户行为日志是不是有一个这样的特点,就是它一般情况下呢,是没有历史数据的,对吧?啊好,我们先把这一点记住,那接下来大家再跟我想象一个场景啊,那假如很久之前,那当然具体呢,是在我们有用户行为日志之前啊,也是在我们有买点之前啊OK,那当时有一个用户他注册了,那注册之后呢,也进行了登录的操作啊,但是呢,他登录之后只是简单的浏览了几个页面啊,并没有做任何的业务操作,也就是他并没有加购物车,没有支付,没有下单,什么都没做,OK,大家想一想啊,那你说我们会有这个用户的这次活跃记录吗?
13:37
会不会有?啊,那显然是没有的对吧,为啥咱们来分析啊,首先当时还没有啊,这个买点日志,所以说用户行为日志里边是没有的,对吧?那其次呢啊,因为他没有做任何的业务操作,所以当时的数据库里边是不是也不会有任何的记录产生啊。没错吧,那所以说这个用户的此次活跃记录我们是没有的啊,那假定啊,那他从此以后就再也没有使用过我们的应用了,那这会导致什么问题啊,是不是会导致我们在这张表里边儿是没有这个用户的呀?
14:11
是不是这么回事儿,那肯定是为啥,因为咱这张表里边啊,每天的分区里是不是只会保存当天活跃的用户啊,对吧,那由于我们并没有保存这个用户的活跃记录,那所以说它其实是不会出现在DW的这张表里。啊,那所以说我们这儿得到的最终结果里边是不是就没有这个用户啊。没错吧,啊,但是我们有一个要求什么要求就是DWT层的每个分区里应该存放什么,是不是得存放截止到当天的全量的用户啊,对吧?那所以首先那我们这儿就会出现出现一个这样的问题,就是咱这样的可能会丢失一部分的用户啊,这是第一个问题,那我们再来分析第二一个问题啊好,我们继续刚才的场景往下说啊,那假如说在我们有了买点日之后啊,刚才的那个用户呢,那他又登录了。
15:00
OK,那他登录了之后,那这次我们是不是就有记录了呀,对吧,那有记录了之后,那他是不是就会出现在这张表当中啊,那我们得到的最终结果里边是不是也就有这个用户了呀,对吧?但是啊,那即便我们有这个用户了啊,那如果我们用这种方式去求他的首次活跃日期,那咱们得到的这个首次活跃日期其实也是不准确的,对吧。为啥不准确啊,因为很简单,它真正的首次活跃的记录我们是没有的,对吧,那咱们得到的这个最小的日期其实是什么呀?是有记录以来的首次活跃日期对吧。没错吧,那所以说那咱们也会存在一个这样的问题啊,就是首次活跃日期的计算呢,可能是不准确的,那大家来想一想,这两个问题应该如何解决啊。那不知道大家有没有想到咱的用户维度表啊,那首先用户维度表当中是不是存有全量的用户信息啊,那其次呢,用户维度表当中有一个字段叫做c time,那这个time是啥呀?是不是就是用户的注册日期啊,对吧?那用户的注册日期是不是就是它的首次活跃日期啊?
16:04
所以在这儿呢,诶,我们可以再写一个子查询啊,那这个子查询从哪张本里查数据呢?就从用户维度表里查啊,那查什么数据,把所有的用户啊和他的注册日期啊查出来啊之后呢,再用下边这个子查询,跟我们刚刚写的这个子查询做一个left join啊,那这样一来,那咱们是不是能解决这两个问题了呀,对吧?首先我们能够保证最终的结果是全量的用户啊,那其次呢,诶,我们能够准确的找到每一个用户的首次活跃日期。没错吧,那OK,那接下来咱把这个子查询给它写一下啊好,那现在我们select,然后呢,应该是from哪张表啊,是不是应该是diam user in for啊对吧?然后注意啊,我们需要从哪个分区里查出去啊,咱是不是需要从9999分区里对吧?9999杠九九杠九九,因为这个分区当中存储的是全量的最新的用户信息,对吧?啊,OK,那我们这儿呢,只需要拿到ID以及对应的cur time是不是就可以了。
17:02
对吧,那当然呢,这个create time呢,它是date类型,有年月日十分秒,对吧,在这呢,我们需要给它格式化一下,我们只需要日期就可以了啊,就data format一下啊,那把这个create time放进来啊,完了之后呢,格式化成年月日的格式来。OK,那这样一来的话呢,我们就能拿到全部的用户啊,以及对应的首次活跃日期了,那一会儿等我们把下边这个子查询写完了之后啊,再跟它做一个left join就可以了,那我们继续写下边这个子查询啊,那在写之前大家要注意啊,咱们需要先把这个字段删除掉,对吧?啊,因为我们已经在上面这个子查询里边求出来的每个用户的首次活跃日期了,那下边就不再需要了,对吧?OK,那我们把这个MIT给它删除啊,好,那我们继续往下进行啊,那我们先去看一下下边这几个字段是什么内容的啊,咱们去翻一下。来大家看啊,那下边的内容是不是都是与订单相关的统计啊,对吧?那我们把这些字段先拿出来,CTRLCF3我定在这儿啊,OK,大家看到啊,这个字段比较多,对不对啊,但是大家不用怕啊,为啥?因为这些字段的逻辑跟刚才我们所写的与登录相关的这几个字段都是一样的,那可能唯一需要大家特殊注意的地方呢,就是这两个字段,就是诶首次下单时间和末次下单时间啊,那至于下边的什么最近一天,最近七天,最近30天的诶这个聚合值,诶跟这个套路是一样的,也是使用summer衣去做就可以了啊好,那现在呢,我们一起来看一下,诶最开始这两个时间啊,就是首次下单时间和末次下单时间,来看一下他们两个应该怎么求来我们分析一下啊,那假如啊,某用户他的登录以及下单的状况是这样的啊,假如他在这一天登录了啊,在这一天也登录了啊,这一天也登录了啊,这一天也登录啊,继续诶这都是他登录的日期啊,但是呢,他没有在每天。
18:51
下单啊,他只在某几天下单了,比如说在这一天下单了啊,然后呢,在这一天也下单了啊,那其实咱们所谓的首次下单日期,那是不是就是这一天的日期啊,没错吧,那末次下单日期呢,是不是就是这一天的日期。
19:05
没错吧,但是大家要注意啊,我们现在拿的是什么?拿的是不是他这所有的活跃记录啊,对不对?所以在这儿呢,我们没有办法直接使用最小值或最大值去求它的首次和末次下单日期,对吧?如果直接对日期求最小值,那你得到的是不是这个?呃,求最大值,那得的就是它了,对吧?啊,那显然这不是我们想要的啊,那咱怎样才能准确的得到它的首次下单日期和末次下单日期呢?啊,就在那儿可以有一个这样的思路啊,就是假如我们能够把它没有下单的日期给它排除出去啊,那剩下的日期是不是都是他下单的日期啊,对吧?那从剩下的这部分里边,我们再求最小值或最大值,那是不是就容易了呀?没错吧,诶,那具体怎么去落实呢?啊,其实很简单啊,在这我们也可以借助这个sum if的思想啊,只不过在那儿呢,我们不用sum if,我们用什么呢?用啊mean衣或者是max衣服。啊,那具体怎么写呢?大家来看一下啊,我先写完再给大家解释啊,在这呢,我们要想求首次下单日期,我们可以这样写啊,来一个meanin,然后后边呢,来个if if,什么if order count order count啥意思是不是下单次数啊,对吧?下单次数大于零是不是表明他在今天的下单了呀,对吧?啊,OK,那这时候我们就返回一个什么东西呢?我们就返回一个DT,否则我就返回啥。
20:23
否则我就返回闹。啊,那你想一想啊,闹值它是不是不参与最小值的运算呀,对吧?那这样一来我是不是相当于就把所有的未下单的日期排除出去了啊,然后呢,从剩下的日期里边选了一个最小的,那这个是不是就是首次下单日期没错吧?那同样的道理啊,我把这个min改成max,那咱们得到的是不是就是末次下单日期啊?OK,那这就是咱们的首次和末次下单日期的这个球法啊,好,那这两个完成之后呢,我们再继续往下看啊,那下边其实就是呃,一些最近一日,最近七日,最近三日的聚合值了,那刚才也说了啊,就这部分聚合值呢,实际上也是这样的一个套路啊,那如果我们要想求最近一天的啊,那咱就sum if dt等于最近一天的日期。
21:13
啊,那如果说我要想求最近七天了呢?诶,那就sum if,诶DT大于等于诶七天前的日期对吧?那30呢,那就大于等于30天的日期,那如果是从开始至今的累积值呢,那是不是直接求和就完事了呀,对吧?那所以剩下这些字段呢,我们就不再一个个写了啊你把文档当中结果拿过来,咱一起看一下就可以了啊好,我们去找一下来咱们把这个点掉啊,来找到订单,哎,从这开始是不是就是订单对吧?然后我们往下走啊来往下走走走到哪呢?到这儿啊,这就是与订单相关的所有的统计值啊,好,我把它拿过来啊,来放在这个位置来CTRLV,好我们一起来看一下啊,那我先给它格式化一下,哎,这个往前推一下,那这边呢,往前推一下。来shift table吧啊OK,那现在我们一起来看一下啊,那这部分内容呢,统计的是不是就是所有的最近一日的这个聚合值啊,对吧?那现在往下走,那这些呢,就是所有的最近七日的聚合值,那这就是最近三十日的,那下边呢,就是从开始至今的聚合值,那实际上这个思路呢,与最开始那几个字段都是一样的啊,那在这儿呢,我们就不再一个一个看了啊,那包括下边的与支付相关的统计,与退单相关的统计,与退款相关的统计等等等等,完全都是一样的思路,那所以后边的内容呢,我们就,哎不再一一演示了啊,咱们把最终的结果拿出来一起看一下就可以了啊好,往下啊,往下来来来来到最底一下啊嗯,来,我们到这个位置。
22:40
来复制一下啊,来放到date格式当中,来,我们放到这。啊,那这个就是我们剩余的这个字段的统计啊,大家可以看一下啊,那这里边儿统计的逻辑呢,仍然跟之前是一样的,对吧?那这是最近一日的哎,最近七日的,最近三日的,这是从开始至今的啊在这儿我们就不再一个一个看了啊好,我们给它格式化一下来把这个往回推一下。
23:04
好,那现在我们相当于把第二一个查群也写完了,对吧?那剩下的内容就简单了啊,剩下干啥?剩下我们要做的是不是就是把第一个和第二个查询使用left join给它连接在一起,对吧?然后呢,再从连接到一起的序表之中选择咱们最终的每个字段啊,是不是就这样了呀,对吧?那这部内容比较简单,所以我就不再演示了啊好,那现在我们把文档当中的结果拿出来一起看一下啊来。这个大so有点长是吧?来我们找到,诶应该在这个位置对吧?来CTRLC啊全部拿过来,拿来之后呢,放到data group当中啊,那这个咱拿到的是不是就是最终结果来对吧?哎,咱们写一个呃,完整哎,Circle,好,那现在CTRLV给它拿过来啊好,我们大家来看一下啊,那首先看这个位置在这儿,是不是给它封装到了一个哎,括号当中对吧?这是T1,那下面呢是T2,那T1跟T2进行left run啊好,然后照完之后我们就可以从中选择咱所需的结果了啊然后大家要注意一下啊,就是这两部分数据,那它们的包含关系应该是什么样的,我们得清楚才行。
24:07
啊,那首先那这一部分数据它是不是包含全量的用户啊,对吧?啊,那这是全量用户,那下边这部分数据呢,它一定会包含全量用户吗?是不一定的,对吧,我们这个分析过对吧?它是不是可能会缺少一部分用户啊,也就是说肯定是第一个子查询,它是包含第二个子查询的。没错吧,啊,这一点咱们要搞清楚啊,那完之后呢,我们来一个问题啊,既然他们的包含关系是这样的啊,那所以说我们进行之后,你像这些位置是不是有可能没闹啊。对不对,那所以说我们一会在选择这个字段的时候啊,需要去考虑一下,如果右边哎,也就是第二个子查询哎,那它的这个值为now,那我们应该如何处理啊,那下来咱们一起看一下来往上走。啊来往上走来我们看第一个字段啊,当然第一个那选的就是ID,这个不用多说,这个肯定是出自于谁啊,出自于T1对吧,啊好,接下来往下走。
25:04
看这个logging data first啊,那这个是不是肯定也出自于T1对吧,你你你注意观察一下啊,因为T1咱有全量的用户对吧?T1里边的字段是不可能为闹的对不对,那所以这俩字段没有做处理啊,那你看从下边开始,是不是所有字段咱是不都有NV啊对吧?啊OK,那这其实就是对咱们对那个值的处理啊好了,那我们看下一个字段啊,下一字段是啥?下一个字呢?是不是末次登陆日期啊,对吧?啊,那如果我们在求末次登陆日期的时候遇到这个闹值了。对吧,那你说这一部分用户,他的末次登日期应该是多少呢。啊,那维闹说明什么呀,维闹说明这些用户啊,他的历史的访问记录我们没有保存对不对啊,那所以没有保存,我们实际上是无法获知他准确的末次登录日期的,没错吧,那所以这儿没办法,我们就只能给他一个,诶相当于一个初始值了啊在这儿呢,我们把诶这部分用户的末次登录日期就设为了数仓,诶上线的前一天啊,也就是14号前一天也就是13号啊。
26:06
这个呢,大家要注意一下就行了啊好,那接下来我们继续往下走啊,那再往下走呢,其余的你看像这些这些是不是都是那个最近一日,最近七日三日的聚合值啊,对吧?哎,像这些内容哎,如果为闹值,那我们就直接给它负零就可以了。啊是这样的啊好,那接下来继续往下进行,那大家来看这儿啊,这俩字是啥呀,是不是首次下单日期和末次下单日期啊,对吧,大家可以看到这两个字呢,我们也没有处理对不对。啊,为什么他也没有处理呢,这个为什么不需要用NV啊,其实很简单啊,那如果说没有首次下单日期,没有末次下单日期,那就说明什么呀。啊,那是不是说明这个人根本就没有下过单,对不对,没下单,那所以他的首次和末次下单日期是不是就应该保留这个not纸啊。对吧,啊,那所以它是不用处理的啊,那其余后边都是一样的啊,所有的最近一期三十日的这个聚合值,那我们诶都是这样去处理,都加NVL,如果为那就用零来给它替换啊,那下边还有一个呃,首次支付日期,末次支付日期,那这个呢,同样也是没有进行处理。
27:12
啊,OK,那我们继续往下走啊,下边呢,就都是一样的思路了啊,都是NVL啊OK,这个我们就不再一个个看了好了,那这样一来的话呢,我们就把所有的字段全部都选出来了,对吧?啊,那直到现在呢,我们就已经把首日装载的核心工作完成了啊那最后我们只剩下一步了啊,就是干啥是不是把数据给它insert or write到DWT层的诶用户主题表的14号的分区当中就可以了呀。啊,对吧,啊,OK,那到目前为止,我们就把这张表的首日装载讲完了。
我来说两句