00:00
来各位,那接下来我们看一下周日大家做的这个用户新增活跃统计的需求,呃,这个需求他要求我们统计什么内容,我们先简单的回顾一下啊,呃,他让我们统计的一共有两个指标,分别是最近一期三十日之内的新增用分,还有一个呢,是最近一期三十日,呃之内的这个什么呀,活跃用户数对吧?OK,好,那我们要算这两个指标之前,那咱们还是得按照之前的逻辑去做啊,首先咱们得需要分析什么呢?分析这两个指标他们依赖什么样的业务过程对不对?那大家想一想,你说统计这个新增用户时,你说我们应该找哪个业务过程啊,对吧?新增你就找哪个业务过程,是不是应该找用户的那个注册的业务过程没问题吧?OK,好,那这个所谓的活跃用户,我们找哪个业务过程呢?我们前面提到过,说我们所谓的活跃,我们在这儿是按照登录去进行这个定义的,对吧?登录即为活跃,那所以它对应的是不是应该是登录的业务过程对不对?那只要我们把业。
01:01
过程明确下来了,那我们是不是就知道去找哪些表了呀,对吧?来咱们一个个来先看这个新增用户数啊,OK,那现在我们打开gra,在这儿写一下这个circle,呃,当然我们在做这个circle之前呢,也是需要先给它简化一下,我们暂时不考虑统计周期,咱先只算一个最近一天的,OK啊,也就是我们需要算的就是最近一天的新增用户数和活跃用户数,好,我们先看第一个值新增用户数,诶那我们刚才提到了新增用户数我们应该去找登注册的一务过程对吧?那注册业务过程我们在DWD层的是有一张时表的,那DWS层有汇总表,注册注册我们根本在DWS层就没做过汇总,对吧?所以这个咱没得选,是不是只能从DWD层去取出对不对,OK,那接下来咱们就来一下啊,首先我们select from dwd层的应该是用户域是是registerc这张表啊,对吧?好,那完之后我们现在只算最近一天的新增用,所以说我们只需要拿到是不是最近一天的这个注册成功的记录就完事了,对吧?好,拿到之后我们要求的是啥。
02:01
是这个人数对吧,一共有多少个人,所以说在这儿呢,我们应该直接怎么做呢?是不是直接进行抗呀,对吧?那由于这张表当中我们前面提到过啊,呃,它每行数据是不是代表的就是一个用户啊,对吧?因为一个用户只能有一次注册成功的记录,所以说在这儿呢,我们直接康乃星得到的结果它就是人数,诶,所以说这个就搞定了,哎,非常简单啊,好了,那第一个搞定之后,我们来看第二一个活跃用户数,活跃用数在这边呢,我们也是只算最近一天的啊好,那我们来分析分析他应该怎么算,首先DWD层有一个所谓的登录实时表,这个肯定能求出来咱们的值对不对,怎么求呢?你找到登录实时表,找到我们最近一天的所有用户的登录记录,对吧,我们对UID进行一个去重统计,是不是能得到今天的活跃人数啊,对吧?啊,但是你这个呢,显然数据量是比较大的,所以我们还得先考虑DWS层有没有表,对吧,DWS有没有那个登录的这个汇总表。有没有应该是有的,对吧,咱们找一下这儿是不是有一个dws u,这是用户力度对吧?完了之后呢,诶也然后呢,是这个login TD对不对,Log in是不是就是那个登录啊,对吧?那所以说这个其实就是一个呃登录的,这是一个登录的一个汇总表,OK,那我们来分析分析,从这儿咱们能不能求出来,就是我们今天的所谓的登录人数呢?或者是活跃人数能不能求出来,显然是可以的,对吧,咱们打开这张表看一下啊,就是这张表当中,我们实际上呢,是统计了我们每一个人他的什么末次的登录日期,以及他的一个什么累积的登录的次数,对不对,OK,那我根据谁能把今天的活跃用户给他统计出来的,根据他是不是就能求出来呀,对吧,只要他的莫斯登日期等于咱们今天最近一天的日期,OK,那他是不是就是一个最近一天的活跃用户啊,对吧,那所以从这诶肯定是能求出来的啊,所在这咱们基本上就定下来了,我们从DWS取出来了,哎,Select from dws呃,然后呢,后边我们来找,找到这张表之后呢,我们先。
03:59
拿到它的一个分区吧,得各位同学咱们拿几个分区,就拿一个分区就行了,对吧?因为咱们得知道这张表的分区规划是什么样的,还记得吗?是每天的分区是都存放历史至今的所有的登录记录的汇总结果呀,对吧?也就是说我最近一天的一个分区就有所有用户的汇总结果,所以咱们只拿一个分区,诶2020杠零六杠幺四把它拿出来,拿来之后是不是还得再做进一步的过滤对吧?我们得找到那个log in data last末似登录日期得等于2020杠零六杠幺四才完事,好找到之后我们是不是也是需要算人数啊对吧?直接count星是不是就行了?诶为什么看型?因为很简单,这张表的力度就是啥力度,就是用户力度啊,所以说直接行,就是能数啊啊,虽然这两个小三很简单啊,但是呢,呃,我希望通过这俩小三,就是给大家再把就是我们做每一个指标的时候,咱们这个大致的思路给他走一下,对吧,就是我们必须得明确,OK,看到这个指标之后,我应该怎么想对吧,咱们得先明确业务过程对不对,然后呢再去看。
04:59
DWS有没有合适的表对吧?有就用,没有就用实时表对吧,是不是还是这个过程咱们把它给给它掌握熟练了啊,行了,那接下来我们继续往下走,呃,这俩数都算出来了啊,但是呢,我们现在只算出来了一个最近一天的对吧?那完之后我们得把这个完整的算出来,也就是我们还得考虑七和30对不对,七三十咱们还是分开考虑啊,我们先看呃,这个就是新增的人数啊,新增人数,新增人数,比如说我现在呢,想算最近七天内的新增的这个用户,你说这个怎么算,这咱们算的1D的啊,这是7D 7D大家说怎么算呀。
05:34
是不是跟他应该差不太多,对不对,这个怎么做就行,我直接拿过来,完了之后呢,这个分区我过滤几个分区,我过滤是不是七个分区就完事了,对吧?诶,OK,那我先写上咱们,然后咱们再分析啊呃,应该是data,然后呢,Sub b萨对吧,然后当天日期放进去,我减一个六,这就拿到了七天的这个分分区了,拿到七天的分区相当于就拿到了我们最近七天的注册成功的记录吧,对吧?OK,好,那你直接一看看芯不就是最近七天他的新增用户嘛,对不对,很简单,OK,好,那七二会了,我觉得30大家肯定也没问题,那直接怎么办呢?是不是把这个六改一下,改成29,拿到30个分区,那30的这个新增人数是不是也得到了呀,对不对,这个就非常非常的简单了,OK,好,那这个看完之后大家肯定能够发现啊,就是我们这几个circle呢,它又具备一个什么样的特点。
06:25
具备什么样特点,是不是又具备,哎,咱们之前分析那种啊,咱们分析分他们仨有什么特点啊,呃,一个就是相同点,一个就是不同点,对吧?相同点是什么呢?又是聚合逻辑完全相同对不对?不同点呢,是不是又是在对这张表当中的不同的分区进行聚合呀,对吧?也就是它又是在对相不同的数据进行相同的聚合,对吧?那这块咱们应该怎么做呢?是不是也可以先去构造一个数据对不对?然后呢,咱们分三部分,一个是一,一个是七,一个是30,这个只有一个分区,这个呢有七个分区,这个呢有30个分区,然后是不是再分组统计就完事儿了,对吧?还是那个套路啊好,那现在呢,我们再把这个套路再给他重复一遍啊,让加深大家的一个呃印象,OK,那我快速的写一下啊,来我们直接select from,然后找到谁,是不是找到咱们就基于它改一改就行了,这个非常好改,来找到它之后呢,咱们怎么读。
07:16
这怎么做,是不是应该是对这张表进行一个explode呀,对吧?哎,我们首先先来一个natural view,然后后边e pro,呃,里边呢,咱们放上一个A,一个固定长度的数组一七三十,对吧?然后后边来一个ts this OK,好,那这样一来我们现在就已经完成了第一件事儿了,就是将这张表的数据是不是已经相当于是扩张为了三份了呀,对吧,这三份当当然当前他们这三份数据是不是一样的呀,对不对?诶,但是我们得保证这个只留一个,这个留七个,这留30个分区,所以说我们还得再进行一个过滤对吧?好,那现在呢,我们找到它之后呢,怎么写这个过滤条件,是不是还是date这个,呃,应该是S,对吧?然后呢,我们把当天日期放进去,后边咱减谁减去re list是不是还得减个一啊,对吧?诶这样一来我们这三份数据就已经拿到了,就是这个操作咱们已经做过很多遍了,我觉得大家现在应已经比较熟了啊,好了,那现在数据咱们准备好了,接下来我们要做的工作就是是不是直接进行分组。
08:17
就完事了对吧?按谁分组,就按照瑞森的代分组,那完了之后我们来到最开头啊,这样呢,是不是再来一个森的代,那就完事了对吧?OK,那这样一来我们就同时求出来了,就是最近一七三十的这个新增用户数了,对不对?OK,那当然你这个要写完之后,上面那个分着写的是不是就不用再要了,对吧?直接删除好了,那新增用户数咱们这个就算是搞定了,那接下来我们看一下这个活跃用户数,大家想一想,这个活跃用户数我们要想算一七三十的,这这个应怎么算呀?一的咱们算完了对吧。对不对,七怎么算?哎呀,你说七怎么算啊,这刚才咱们那个新增用数这个结果已经出来了啊,你会发现这个新增用户数呢,这个结果当中它有一个特点什么特点一是一个,然后七跟30是一样的,对吧?为什么是这样的一个结果,大家应该能想明白吧,因为我们注意回忆回忆一下啊,就是咱们这个注册记录,我们主要是来自于哪的,来自于买搜QL表的,对吧?买搜QL表是有业务数据的吧,对不对?OK,那我们的业务数据是不是一共有五天对吧?你有五天的话,那你琢磨琢磨是不是?呃,我这个七和30都是最近五天的,对不对,所以他俩是一样的,而一就是最近一天,哎,所以他跟咱们是不一样的,所以这个结果是没问题的啊好,那现在我们暂时先不看了了,我们再回到这个活跃用户上面来,哎,大家说七最近七天内的活跃用户,我们应该怎么求回忆,什么叫做最近七天内的活跃用户啊,是不是只要这个人他在最近七天内活跃过,OK,那是不是就是一个最近七天内的活跃用户啊,对吧?来。
09:51
或者换句话说呢,只要他的末次活跃日期是位于最近七天内的,OK,那是不是它就是一个最近七天内的活跃用户对不对?所以说我们要想算最近七天的活跃用户很简单,只需要把这个拿过来,然后把这儿是不是改一改就行了,对不对?我们应该改成什么呢?应该改成login data last,是不是大于等于啊对吧,大于等于data,诶,然后呢,来一个S,然后呢,我们把当天日期放进去,后边来一个减减六是不是就完事了,这是不是就是最近七天内的活跃用户啊,对不对?OK,好,那30呢,是不是也是一样的道理,只要它的墨色活跃日期位于最近30天内,那它就是一个最近30天内的活跃用户,OK,好,那完了之后,这个一七三十的活跃用户,咱们就都求出来了,都求出来之后,我们还是来观察观察他们仨有什么特点,他们仨其实也是在对不同的三份数据进行相同的聚合吧,对不对,OK啊,你看这里边儿呢,它是在对哪三份数据进行这个聚合呢?首先第一。
10:51
这个是logging data last等于是不是零六杠幺四这一份数据进行一个count性聚合,对不对,而这个呢,是在对log data last,于等于是七天前的日期的这部分数据进行一个抗性的聚合呀,对吧?而这个呢,是在对这个30天的这个数据进行一个聚合,那所以说在这呢,大家应该能看出来,它也是在对不同的三份数据进行相同的聚合,所以咱这是不是也可以进行诶这个炸裂再过滤,再分组聚合呀,对吧?诶也是可以这么做的,所以接下来呢,我们快速的去写一下这个啊,我们就基于前面的一个改一改就行,咱们把这个拿过来,诶之后呢,我们是不是也得对它进行一个炸裂的操作,对吧?OK,好,那现在呢,我们先进行炸裂,呃,把这个拿过来直接复制过来就能用啊来放在这儿,这个应该没啥问题,对吧?好,那接下来我们继行走下边咱是不是得过滤了呀,对吧?过滤各位同学,你说这回我们用哪个字段去过滤,是用DT吗?
11:46
这回就不是了,你注意观察啊,那咱们这三个自查群他们拿的是不是都是同一个分区啊,对吧?啊,因为我们这是TD表对吧,一个分区就有全部的用户信息了,所以他这这个不是用地T去过滤,那用谁过滤呢?应该用login data last去过滤对吧?所以这是大家需要去特别注意的一点啊好,那我还是把前面这个稍微的给它,诶改一改就行,OK,咱CTRLC拿过来,呃,之后呢,我把这个放在这儿好了,那这样一来是不是就同时拿到了这三份数据了,对吧?那接下来我们要做的就简单了,是不是也是直接加上一个葛鲁外re ne就完事了,对吧?来直接回车,诶,那这样一来我们就能同时得到最近一期30天内的活跃用户了,OK,就是这么个逻辑,大家看啊,这还是满足这个条件的对吧?OK,那这个呃,七和30它是一样的对吧,然后一个呢,是不一样的,当然这块呢,我们没有那啥是吧,我们没加这个for re对吧?OK,这个咱们给它加一下啊呃,加一个逗号,嗯,OK,好,那现在呢,我们再重新执行一下。
12:46
哎,好了,那这一七三十那咱们就算出来了,诶这个完事之后我们就继续往下进行啊各位同学呃,那下边咱们做一个什么操作呢?下边我们是不是一七三十的这个就不需要了呀,对吧?那最后咱是不是得把这两部分数据给他拼接一下,对吧?诶这回拼接我们应该用哪种方式?
13:04
这个用照呢还是用妖孽?这个得用得用join吧,对不对,为为什么要用job,很简单,因为在这你注意观察是不是这个新增还有活跃用户数,它是位于一行里边的不同字段呀,对吧,那所以说我们应该给它横向的拼接,所以说应该用这,那这样的时候连接字段大家说应该用谁。是不是显然应该是用对吧,咱得保证是不是同一个统计周期的新增数和活跃数得在一行吧,对吧?诶最近一天呢,OK,新增数回跃数多少,最近七天新得数回跃数是多少,得这么去拼,所以最终我们只需要用它俩进行一个照,那就完事了,这个照比较简单,我就不再诶去浪费时间了啊好了我就不写了,我把视频给他停一下。
我来说两句