00:00
呃,好了,各位同学,ED和ND,我们现在就先讲这么多啊,然后接下来呢,我们再来看一下这个TD,也就是历史至今的汇动苗,我们到底怎么去设计,呃,这里边呢,我们肯定也得是不是通过一个具体的需求去把它引出来啊,对吧?那在这我们看哪个需求呢?来我们一起去找一下高同学,咱们看哪个需求找一下,呃,在这边呢,我们找到我看啊找哪个比较合适,我们找一个新增交易用户统计吧,来咱们就用这个需求去把这个T代表给他引一下啊好,各位同学,那现在呢,我们先来看一看,就是这个需求,咱们到底要求什么啊?来它的需求看起来是不是要求比较简单呀,对吧,一共就有俩指标,这俩指标分别是什么呢?来一个是最近一期三十日,然后呢是什么新增下单人数。然后还有最近一期三十日新增支付人数,这个支付的我们暂时先不看,咱们就把这个精力放在第一个上面就行了,什么叫做最近一期三十日新增下单人数。
01:01
什么叫最近一期30现在爱的人?这个其实说实话好像看起来呃能理解又不能完全理解似的,对吧?就是那种感觉啊,我给大家明确一下啊,什么叫最近一三式呢?咱们先以一个为例啊,先以最近一天为例,最近一日的新增下单人数指的是什么呢?就是说我第一次下单是在最近一天的,这个人一共有多少个啊,是这样的啊,这就是所谓的最近一天下单人数,这里边儿最关键的一个定位是什么呢?就是最就是第一次下单是在最近一天啊OK啊好,那这个新增下单人数跟他什么时候注册有关系吗?有关系,没有任何关系,对不对啊,只要你第一次下单是在今天,那你就算一个最近一天的新增下单用户对不对,完了之后呢,这样的用户有多少个,那是不是就是一共有多少人呀,对吧,就是这个意思啊,那最近七天的新增下单人数又是什么意思呢?那就是说你的手就是第一次下单对不对,是位于我们最近七天里边呢,任意一天,你只要是在最近七天里边,那是不是就算一个最近七天的新增下载用户啊,对吧?那完了之后呢,这样的用户有多少个,我给他算一下,那就完事了,哎,最近30也是同理,好,那这个需求大家现在应该已经明确了啊,那我现在问题来了,怎么算这个指标啊,啊怎么算,先先说一吧啊,怎么能算出来最近一天的新增下单用户数。
02:28
怎么算,是不是得,现在咱们有汇总表吗?是不是没有汇总表啊,对吧,没有汇总表,那咱们能想到的只有什么呀,只有DW层的表对不对,所以就得分析分析,你比如说我算这个指标,我应该从哪张DWD层的表里取出。其实咱们所有的指标,说实话,你没有DWS层是不是也都能出啊,对不对,DW存在的意义就是为了减少重复计算,对不对,这一点要所以咱们现在没有汇总表,那是不是就得首先去找这个明细表啊,对吧,那你分析分析这个怎么算?你找明细表首先得先明确你找哪张明细表啊,对吧,找哪张啊,这肯定是跟下单相关的,对不对,所以说咱们得找下单那张尺表好,那假如说已经把这表拿过来了,怎样能找到最近一天的新增的下单用户啊,怎样能找,你要知道啊,咱们那个下单时表呢,我是一个分区表,我一天一个分区,我每天分区里是不是放的就是当天的下单记录啊,对吧?啊,你针对这样的数据去求一下这个指标怎么能求出来。
03:28
分析分析怎么求啊,你就先就就先求个最近一天的就行,先不用考虑那么多最近一天的新增下单人数,咱们大致的思路应该是这样了啊,你求人数你得先把什么求出来的,你得先把这点人求出来对不对,求出来之后再看一下是不是就完事了,对吧?也就像关键问题,怎样能找到最近一日的新增下单用户对吧?把那些用户先找到。嗯嗯,按照我们刚才的描述啊,什么叫做最近一热新增加用户,就是你原来没下过单对不对,然后你最近一天下单了,这不就是一个最近最近一天的新增下单用户吗?对不对?好,那关键是怎样能把这样的人找出来呀,怎么找没有那么难吧,这个牌你可以怎么找,你可以这么去找啊,首先咱怎么办呢?我可以先把咱们这个最近一天的下单记录给它找出来,最近一天的下单记录找出来啊,找出来之后呢,里边咱们先对UID去壳虫,因为有可能一一个人一天里边是可能会下多次单,对吧,先去壳虫,OK,那我们这儿呢,就能得到最近一日的下单用户对不对?完了之后呢,我们再来一个子查询干啥呢?把这张表当中,除了最近一天的分区对不对,剩下的户就全查出来,对了,查来之后,当然我们也需要对用户是不是进行一个去重了,对吧,驱虫,然后呢,我们就能达到是不是除了今天,然后历史上的所有的下载用户了吧?OK,好,那问一下大家,你说这两部分用户。
04:53
他们的包含关系还是什么样的,谁包含谁还是互不包含,应该是互不包含吧,对不对?OK,为什么互包含呢?来咱们分析分享,假定这个是除了今天之外的所有下单用户,这个是今天的下载用户,那他俩的对应关系应该是这样的,就是互包含,为什么来分析一下,首先那互包,呃,互包含呢,也就中间他俩可能会有共有的部分,也可能会有各自独有的部分,对吧?共有的部分意味着什么呢?是原来下过单的用户,今天他又下单了,对不对,这就叫做呃,这个中间共有的部分的一个含义,那接下来我们看这这一部分,这部分什么意思呢?是原来他下过单,但是今天他没下单,对不对?OK,好,那接着往下,这部分呢,你看啊,原来是不是没下过单?
05:39
对吧,那今天是不是下单了,那这一部分人不就正好是今天的下载用户吗?对吧,咱要找的时候就是他们,哎,那能不能找是能找到呀,对吧,这个怎么能把这部分人拿出来呢?很简单,你把刚刚这俩紫砂学呀,你给他做一个照做哪种招。现在这个你做in run行吗?不行,对不对,那你做left run行吗?也不行,咱们就得来一个,呃,你负障也行,你right障也行,对不对,Right照样之后,那我这得到的数据应该是这样的一个形式吧,然后上边不为空,这儿是不是为空啊,为空的是不是就是咱们今天新增的呀,是不是就能找出来了,对不对,OK,那这样就能求出来这个指标,好最近一日咱会求了,那你说最近七日这个怎么求的,跟这个是不是差不多呀,对对不对,最近七日你怎么求,是不是还是拿到这个明细时表,我这回先拿什么呢?我先拿七个分区对不对,先把最近七个分区拿出来,然后呢,我把用户去个重放,放在这儿之后呢,再拿一遍,就是除了最近七天的,剩下的分区都给它拿出来,是不是放在这是不是也是一样的思路,做一个正,然后再取这边就完事了,对吧,诶也可以,就是30也是同理,好,那这个指标咱们这么算没有任何问题,能算,但是你琢磨琢磨,这个计算效率它高吗?这个非常低,对吧,你每次去算这个每天的新增,呃,这个下单人数的时候,你都要怎。
06:54
相当于都是要对我们这个事实表明细实表啊,OK,全表的数据是不是进行一个操作呀,对吧,这个显然是效率比较低的,OK,那当然了,你这个新增下单人数是这么算,你下边的新增支付是不是理论上也可以这么算啊,对吧?那这个效率都是比较低的,好了,那现在问题来了,那咱们能不能说诶,我给他设计一张汇总表,然后呢,能够去提高我这个计算性能,然后呢,能够就是简化我这个计算逻辑呢,其实这个不光性能差,这个计算逻辑稍微也有点儿复杂,对不对啊,OK,能不能简化一下咱们这个计算逻辑,能不能优化一下这个,呃,就是计算速度呢?
07:31
能不能来一个汇总表?只算一天。七点累加还不七点累加,这个能行吗?七累加。呃,七天累加我看行不行啊,这个新增的应该行啊,你把七天的每天新增的人数加一起,应该就是七天内的新增的吧,啊,这个理论上应该是行的,这个不用去除啊,OK,也行,你只算这一天也行,就是你只算这一天,这个也得拿全表数据,对吧?这个也不合适啊,也不合适,那能不能说给他设计一张汇总表。
08:02
哎,然后呢,能够帮我们简化一下这个机子,哎,能不能行。来琢磨琢磨,嗯,看一下设计一个什么样的汇总表能够简化我们这个计算,这个就是。靠大家自己这个想象力了啊,琢磨琢磨。看能不能想出来。啊,首先汇总表啊,一个汇总表咱们只需要明确它的几个几个因素就行了,业务过程,统计力度,统计周期,是不是把这些东西给他明确了就行,对吧,你琢磨琢磨,呃,业务过程我已经帮大家确定下来了,就是下单对吧?然后大家只需要琢磨琢磨力度,我选择什么力度的比较合适对不对?呃,然后呢,统计周期我选择什么统计周期的比较合适。琢磨琢磨。嗯,整一个什么力度就比较合适,哎,这个可能不是那么好想是吧?啊咱们没想出来啊,呃,其实好几个弯了啊,好几个弯了,其实应该是有咱这个新马书他上来有应该有三四个班了吧,其实只有一个班的有一个同学想出来了,当时啊,这个同学想的还是脑子比较快啊,然后接下来咱们分析分这个东西你怎么去设计它能够好一点来,咱们这么想就是假定现在啊,我要是有一个这样的数据集,什么样的数据集呢?我维护了就是每一个用户的首次下单日期。
09:23
我要是维护一个每个用户的首次下单日期,你想一想,我再去算这个新增下单人数的时候,你说好不好算懂不懂,假定咱们已经有这样的一个数据了啊,张三第一次下单是什么时候,李四第一次下单什么候,王五第一次下单什么时候,我都给他记录下来,对不对?你只要拿到这个结果,你再去算什么一七三十日的新增下单人数,那是不是就跟玩似了呀,就非常简单了,对不对?怎么去算呀,怎么算最近一天的新增下单人数,只要这个人他的首次下单日期位于最近一天内,那OK,它是不是就是一个最近一天的新增下单用户。对不对,那我们是不是直接从这里边过滤一下,看一下那就完事儿了,对吧,非常简单,那最近七天呢,是不是也是同理,只要它的首次下单日期位于最近七天内,那我就给它过滤出来,完了之后呢,看了一下,那是不是就完事了啊,30的也是这么去算,诶你会发现,诶你这么算,这个首先计算逻辑是比较简单的,再一个呢,我这个计算量它也不会太多,因为你这个每个用户是不是占一行啊对吧,它不是咱们那个明细数据对不对啊事也就是总体来说这个呢,诶它相对来说要好一些对不对?好,那你看一看,就是这样的一个数据集,它要是对应到我们这个汇总表上边,这应该是一个什么力度,什么统计周期的汇总表。
10:36
业务过程肯定是下单对吧,这是一个什么力度的呀。一行是不是一个用户刚才说了对不对,OK,那所以力度是不是就是用户力度,那我这个统计周期,这应该是一个什么统计周期呢?你想啊,你要想能把每个人的第一次的这个下单时间给求出来,对不对,OK,那这肯定是一个什么力度的。肯定是个肯肯定是一个什么统计周期啊,什么统计周期。
11:01
你想啊,什么叫他的第一次下单日期,说白了就是他所有的下单记录当中是不是最小的一个日期啊,对不对,那所以说你怎样才能求到这个呢?你是不是得拿到全部的数据进行一个聚合,才能得到首次下单日期,对不对,那这其实就是一个什么呢?就是一个历史资金呗,对吧,你得拿到历史资金所有的下单记录,我是不是才能得到一个所谓的首次下单日期啊,对吧?OK,那所以说这个表的统计周期就是历史资金,也就是TDOK,所以说最终咱们规划出来的就是这样的一个结果集,就应该放在一个就是用户力度,然后呢是下单这个业务过程,然后呢是历史至今的一个统计周期,应该放在这样的一个汇总表当中,只要我们有了一个这样的汇总表,OK,我们再去算类似这样的什么新增下单人数的指标的时候,就会变得非常非常的容易啊,是这样的啊,好,那咱们接下来呢,就来看一看,就是我们这种所谓的历史知金的汇总表,我们到底怎样去进行设计,对不对?来,我把这个视频停一下,然后咱们一起来分析分析啊。
12:02
呃,好,各位同学,那咱接下来呢,就来分析一下这个所谓的呃,历史之金的这张汇总表,咱到底怎么去弄啊,来首先我们还是先来明确一下它的表名应该怎么弄啊来先看表名,呃这个表名呢,我们应该是呃起一个DWS对吧?然后呢,后边呢,应该是交易域,因为下单嘛,对吧,也是交易域的,那完了之后呢,是不是该讲那个用户的力度了呀,对吧,咱们刚才说了这应该是一个什么力度,是一个user力度对吧?用户力度,然后再往下呢。是是不是那个,呃,业务过程啊,对吧,那咱们应该什么业务过程应该是下单对吧?这个不多说,然后最后一个是,呃,这个统计周期,那统计周期我们是历史资金,是不是应该写TD啊对吧?哎,这其实就是我们将来要规划的这张表,哎,咱们应该涉及到那这个表名啊好,那接下来继续往下走,下面呢,咱们就来分析分析这张表的结构应该怎么设计啊,结构是不是还是行列分区啊,先明确行,你说这张表每行指代的内容应该是什么?每行指代的应该是什么?每行?
13:02
呃,每行它指代的是不是应该就是一个用户对吧,根据力度来嘛,对吧,好,那接下来继续往下走,那我这张表的字段应该有哪些呢。自段应该有哪些?呃,首先第一个就是它的一个UID,这个不多说了,对吧?那其次呢,那就是首先得包含我们刚刚所提到那个什么呀,就是首次下单日期对吧?其实你除了能计算一个首次下单日期,你还能算什么呀?啊对,末次下单日期其实咱们也能算对吧,反正也要算,那是不是多算几个更好一点啊对吧?哎,就是咱们有一定的前瞻性,那还可能有什么呢?对累累积的什么下单次数还有什么呀?累积的下单件数,累积的下单金额等等的,是不是就根据那个度量值,咱们去往里边填就完事了,对吧?还是这样,也就是咱们字段基本上就是这些,那当然咱们得知道这些含义都是什么啊,你比如说下单次数,下单建数,下单金额,这都指的是什么呀?指的是一个人是不是从历史至今他下单的总次数,总件数,总金额呀,对吧?诶这个要理解一下行了,那基本上字段就明确下来了,最后就是分区,这个分区咱怎么规划,大家要知道,我要算的话,我不是说我只算一次就完事了,对吧,就是历史至今我也是每天都要算一个历史至金对吧?好那。
14:10
分完之后,你说这个分区怎么规划,那是不是也是一天一个分区对吧?每天的分区里放的应该是什么呢?是不是就是历史截至今天的这个汇总结果呀,对不对,每天都是一个历史至今,每天都是一个历史之间,这个大家理解一下好了,那这个分区规划咱也就定下来了,最后咱们来看一看,就是这种表,我的表结构,这个最终的键面L语句到底应该什么样的,来我们快速的调整一下啊,来CTRLC咱们把这个拿过来,把它CTRLV拿过来来拿过来,然后下面继续调整CTRLV好了,那这个该改的名字咱们就都改完了,那这边咱们也调整一下吧,这个应该是改成是不是用户力度啊,对吧,然后也是订单,然后呢是历史至今啊,改成历史至今。历史哎,然后呢,至今好了,改完了,改完之后我们现在呢,再把里边的字段给它调整一下啊呃,那首先力度刚才咱们已经明确了,就是用户力度,所以在这儿呢,咱们保留一个UID是不是就可以对吧?那接下来往下走,下边我们还需要去保留哪些内容呢?刚才我们大家首先就想到了一个首次下单日期对吧?我们在这给他存一个older date,诶,First,这是不是就首次的下单日期啊对不对?然后继续往下走,那大家刚才已经联想到了,我们这也可以再来一个末次下单日期,比如说来一个last,对吧,末斯下单日期,那再往下呢,我们还能够想到比如说它的一个order com,也就是下单的总次数对不对?然后呢,再来一个,比如说下单的总件数order number,对不对,然后呢,我们再往下走,CTRLDCTRLD,那这还可能会有一个older什么东西啊,啊,比如说那个total amount,对吧,To PL,然后下划线a mod,那当然我们这里边可能还有一些其他的金额,对不对?其他的金额在这我就不再一一列举了啊,那在这呢,咱们就写这几个就可以了,那我怎么把amount也给删了呢?
15:52
CRD再重新写一下啊,来一个O的下角线a to,然后下a mod好了,那接下来呢,我们这个字段呢,就写这么多就行了,这少了个逗号啊,行了,那这个字段咱们就安排这么多啊,OK,那这其实就是咱们这个所谓的呃,历史至今的一个汇总表的表结构的设计啊,那这个完成之后,我们这里边稍微调整一下吧,里边有些字段咱们改一下吧,要不改这个类型改一下,要不然太别扭了啊,这改成big a int,后边注释我就不改了,节省一点时间,这个也是改成DEC模式不就行对吧?我们里边来一个16,那再来一个二,OK,我再给它格式化一下CTRL2L行了,那截止到现在,我们这张表的表结构就算是设计完毕了,那当然光设计表结构不行,我们还得考虑一个问题,就是啥呀,就是它的数据装载我们应该怎么做对吧?好,那视频我停一下,咱们就来分析分析它的数据装载怎么做啊。
我来说两句