00:01
来,我们开始上课啊,呃,DWSDWT这两层我们管它叫宽表层啊,宽表层,宽表层咱们按照主题划分啊,咱们一共分为几个主题啊,一共分为啊,咱们在这看一共看到有几个,是不是有五个主题啊,一共五个主题啊,那呃,前面给大家说过啊,我们这儿的这个所谓的主题,其实对应的是我们DWD层那个维度模型里边的什么。对应的维度模型里边的什么?是不是维度啊,对不对啊,一个维度对应一个主题吧,啊,一个维度对应一个主题啊,然后呢,咱们来看一下这个对应关系啊。哎,我们DWSDWT上下对应啊,所以咱们以一个为例啊,咱们以这为例吧,啊,你看这个里边有一个地区,地区是不是对应咱们地区地区维度活动对于对应于活动维度,那商品呢,是不是对应于商品维度啊,那会员对应于谁呀。注意啊,会员呢,在这儿我们其实对应的就是那个user这个会员啊,可能跟咱们大家所理解那个会员可能有点差距啊,呃,一个会员正常我们跟大家理解就是那种付费会员对吧,咱们需要注付费,哎,是注那个开会员对吧?在这儿咱指的不是那个会员啊,在这儿我们这个所谓的会员指的就是啥注册用户啊,注册用户咱们这儿就叫做会员。
01:22
啊,交的会员啊,这个先搞清楚啊,那也就这个对应的是不是就是user那个表啊,User那个表,所以这四张表它所对应的确实就是我们,诶DWD层维度模型当中的维度确实是这样的,但是这儿我们还有一个特殊一点的,这个主题叫做设备,诶我们在D达D层维度模型当中,我们有设备主题,有设备维度吗?有吗?没有设备维度啊,对不对,没有设备维度,那它所它是怎么来的呢?它怎么来的呀,所以这个呢,相对有一点点特殊啊,相对有点特殊啊,但其实一会儿啊,我们把它讲完之后,我给大家分析分析之后呢,其实这个东西啊,也说得过去,也正常啊,也正常啊,那所以因为它比较特殊,所以咱们就先不讲它啊,咱们先不讲它啊,我们先讲什么样的呢?先讲一个最典型的啊,讲谁讲这个每日会员。
02:16
啊,它所对应的是不是就正好就是用户维度啊,咱们先讲它啊,然后讲完它之后呢,再去给大家讲那个设备的啊再讲设备,然后那现在呢,我们先看这个会员的啊,那会员主题呢,分为DWSDWT层的两张表啊DWS我们是什么?是每日行为对吧?啊是每日累计,每日统计啊那DWT呢是呃累计值,累计值呃,最近七天,最近15,最近30等等等等。啊,是这样的啊,咱们先做一个区分,那咱们现在先整先先整哪呢?先整DWS层的,先整DWS层的啊,那现在我们先把这个DWS层的这个建表语句先给它粘出来啊来CTRLC。啊,注意我们看的是啊,会员主题啊,是会员也就是用户主题U的主题啊来我们打开看一下,这就是咱们这个DWS层啊,它这个U字表当中的这个这个字段啊。
03:13
来简单看一下,可能大家看到这个表之后呢,诶DW层不是宽表吗?宽表不应该字段很多嘛,对吧,但你这看着也没几个字段呀,对不对,这是为什么,一会给大家解释啊,那现在我们来先分析一下啊,就是DWS层这个表它的这个结构啊,那我们去熟悉一张表,那首先咱们需要搞确定的应该是什么呀?就是这张表当中它的一行数据所指代的应该是什么,对吧?大家看一下,那这张表当中,你说我一行数据指代的应该是什么呀?对,是一个用户,也就是一个user字在当天的所有行为的聚合值吧,对不对,那你看一啊,这应该是什么?是不是一个用户当天的登录次数,当天的加购物车次数,当天的下单次数,当天的金额,当天支付次数,当天的支付金额,以及当天的欧里天有是不是下单明细啊,对不对,哎,对不对,也就是说这里边一行数据,它所指代的一定得认听啊,是一个用户,注意是一个用户在当天的所有行为的这个。
04:21
啊,聚合值啊,能理解吧,啊OK,把这个搞清楚,把这个搞清楚啊好,那这是咱们这一行数据所指代的是什么,所指的是什么啊啊那问一下大家,那你说我这张表当中啊,这张表当中啊,有没有可能出现同一个用户在一天里边有多行。啊,就是两行数据的UID都是同一个,有没有可能出现。没可能,因为就也就是一个数据,就是111,一个用户就一行,一个用户就一行,没错是吧?啊把这个搞清楚啊,啊,这是一行数据指来的是什么,然后呢,我们再来看它这个对应的字段,字段刚才已经过了一下了啊,这个字段呢,就应该是维度模型当中跟user这个维度相关的所有事实的那个,哎,度量值的聚合值吧,对不对,那大家可以看到啊,这里边比如说看谁。
05:12
看,Older can't。这是不是应该是下单次数啊,对不对,这个下单次数应该来自于哪。来自于订单那张表对不对,那下边有一个O德尔amount o德尔amount是什么?是下单金额,诶下单金额我们好像回忆一下,我们在DWD层在那个下单金额是不是要多个呀,有一个原始金额,有一个啊优惠金额,有一个什么运费,还有一个最终金额对不对,对吧?那所以说那它是不是都是度量值啊,都是度量值,那都是度量值,你说在咱这个宽表当中,是不是也应该有这么多的度量值啊。对不对,能理解吧,啊,那咱们这儿是不是只有一个。那只有一个,这个其实是不好的,这个表建的其实是不好的啊,咱们建宽表的时候,大家要要明确一点啊,你所建的宽表是服务于什么的。
06:04
是服务于后续的需求的,对不对,那我们后续需求,我可能会要求你统计原始金额,也有可能会要求你统计最终金额,也有可能让你统计优惠金额,对不对,是不是都有可能啊,对不对,那既然都有可能,所以说你建宽表的时候就应该怎么办。应该把这金额全都给算一下,能理解吧,但是咱们这儿这个说实话这个表建的不好,但他没有把所有金额都放在这儿啊,但是我们大家应该知道啊,如果要是啊标准的去做,咱们应该把所有的这个度量值全放在这,能统计的都给它统计出来,做后为后续的各种需求做准备嘛,啊做准备好,那既然呢,他这儿没有明确,呃,没有把所有的金额都拿过来,那咱们这儿呢,只能取其中一个了啊,那咱们这个欧尔amount就就就就就就定为谁呢,就定为最终金额啊,也就这个欧德尔曼呢,它统计的实际上是那个最终金额。啊,把这个搞清楚啊,行,那接下来往下走。下边那个payment count payment amount,这个是不是支付次数,支付金额呀,这个应该来自于哪儿,是不是来自于支付实时表对不对,支付时表是不是跟用户也是有关系的呀?哎,没错,那下面呢,这有一个older。
07:11
Details states啊,Older details,这是不是应该是一个订单明细的统计啊,它肯定来自于订单明细实时表,没错吧?啊,那你看一下他这张表它是一个什么类型的,这它这个字段是一个什么类型的,是一个复杂结构类型,而且还嵌套了吧,是数组里边嵌套的是什么?是结构体。哎,那我问一下啊,为什么这个字段我们要给它设计成一种这样的结构,首先啊,咱们先来看一下这个结构体是什么啊,咱们先看这个数组里边每个元素是啥对吧?看一下结构体当中的字段啊,这个有点复杂,这个字段看一下这个结构体呢,从这到这对吧,它里边有几个字段呀。一个两个三个四个字段对不对,那每个字段都是什么?看第一个SKID上面ID啊,SQ number商品的个数,Order count是不是就是下单的购买的次数啊,相当于对吧?那还有一个什么order amount是不是订单的一个金额呀?啊当然这儿不止指的不是订单啊,不指的不是总订单啊,应该指的是一个什么呀。
08:18
应该是这一个商品项啊,对不对啊,你看一下啊,这相当于一个结构体,他所对应的应该就是什么,就是这个用户今天他所下单的一个商品项,没错吧?啊,那我问一下我一个用户一天是不是可能会下单多个商品啊,多个商品箱,那所以说它外边是一个啥。是一个数组啊,这个人就能搞清楚了吧,这就是咱们这个哎字段的这个类型的这个来源啊,就是这么来的啊,就这因为呢一个U字,因为这一行数据是不是一个user字啊对吧,一个U字,我一天我可能购买或下单多个SKU,那所以说我需要诶放一个数组啊,那一个数组里边每个元素,那就是一个SKU啊,那一个SKU里边我有哪些值呢?有SKID,那下单的件数,下单的次数以及金额,其实这又涉及到金额了啊,其实只要涉及到金额,那咱这是不是也应该是有多个的呀,对不对,应该有咱们那个原始金额,还有什么分摊的优惠,分摊的那个运费,以及分摊的什么呀啊总总金额,那所以说其实也应该是有多个的啊,只不过这边咱们见面只见了一个,那虽然也所以说只有一个的话呢,我们也也认定的就是谁呀,就是那个最终的金额,就是最终金额啊,把这搞清楚好了,那这就是咱们这个字段。
09:38
行,那经过上述的分析呢,我们会发现这几个值比较标准,来自于哪?来自于我们的实时表对不对啊,那接下来我们看看上面这几个值来自于哪啊?先看第一个log count。Log刚才是不是登录次数啊,登录次数,你想我们从我们DWD的那个维度模型啊,你你想一想,你从哪张事实表当中能够获取出来每个用户当天的登录次数。
10:06
哪个是实表啊,哪个是实表,哪个能获取出来呀。哪个都汇聚不出来。对不对,我们实时表有什么,有下单事实,有支付事实,有收藏,有加购物车等等的,那有跟登录相关的吗?没有,如果说你想获取一个U字当天的登录次数,你说你只能去哪找,你去哪找啊。只能去启动日志里边去找对吧,对不对,因为你每次登录是不是肯定会有一次,呃,启动日志啊,对不对,那所以说呢,那这个字段我们应该来自于启动日志表啊,虽然启动日志表呢,我们没有明确的给它划分到维度模型当中,但其实我们前面也分析过了,这张表它应该要硬分的话,它应该属于哪类表啊。是不是就应该是实时表啊,对不对,它里边的一行数据所指代的是不是就是一次启动啊,对,所以它也应该作为一个实时表,只不过这个时表呢,没有明显的度量值,那应该就是啥,就是次数呗,啊,就是次数,那所以说我们要想统计log in count,应该从这上面去统计。
11:07
然后下边。下边呢,咱们这儿还有一个啥,有一个加入购物车次数啊,其实前面咱们说了啊,我们其实对于购物车的统计呢,我们其实更关心的应该是啥呀,应该是每个用户,他最终他购物车当中应该有什么商品,对吧?对不对,那所以说你要要想统计这个加购车次数的时候呢,我们从咱们现有的那个那个购物车的市值表里边能统计出来吗。那能统计出来吗?不能啊,不能,为什么?因为咱们那个购物车实时表,咱做的是啊,是每日全量表,是周期型快照实时表,对吧,咱们并没有记录这个加减购物车的这个明细操作,所以说你要真想统计次数,你在这儿呢,你根本就统计不出来啊,所以你要那这他结果呢,他还是,呃,确实就让我们去统计这个次数了,对吧,那让统计,那咱们从实时表里统计不了,那怎么办?
12:00
从哪去找这个次数啊。他这让统计是不是就是加入购物车那个操作的次数啊,对不对,从哪去找。只能去哪?只能去咱们那个日志里去找了,对吧,哪个日志啊,应该是DWD的那个X log是从这张表里去找啊,啊那这张表当中,因为我们有一个这个哎字段叫做IIDID呢,哎,咱们得找什么样的,找那种car I的对吧?这就是加购车次数得这么统计是这样的啊OK,那现在假如说我问一下大家啊,那现在比如说我们想统计那每个用户的购物车当中应该有哪些商品。那你说咱们这应该是不是得加一个字段呀。对不对,因为咱们关心的其实就是每个用户的购物车里边到底有什么商品,你到时候得加一个用户的购物车里的商品的信息啊,对不对,那你说应该加个什么样的字段呀。购物车商品这样的一个字段,那字段的类型是什么样的,应该。应该跟下边这个比较类似吧,对不对,就是购物车当中,首先我有是不是可能会有多个SKU,那多个SSKU我是不是就得有一个数组,对不对,那一个SKU当中我的信息是不是可能比较多,包括SKU的ID,还有什么SKU的数量,就是你加一个商品是不是可能有多个数量啊,那还有什么,还有你这个金额,那是不是也应该是一个这样的结构体数组啊。
13:19
对不对,是这样的,要是统计的话,你得有一个这样的东西啊,那咱们这儿没有那个字段,没有的话呢,咱们不说了,要有的话,你就得这么去定义这个字段啊,是这样的啊好,那接下来呢,相当于我们就把这个表格里边的这个已有的字段就介绍完了啊,然后呢,我们再来接着想,其实user这个维度呢,跟我们很多事实表是不是都有关联呀。对不对,我还跟什么有关系啊,跟什么收藏有没有关系,脚跟收藏有关系啊,那还跟什么有关系啊。还跟什么退款,跟评价是不是都有关系,都有关系啊,那你像这种事实表的这个度量值,我是不是也应该在这个用户的宽表当中出现呀,也应该有啊,应该有,但是这边呢,它同样是没有,为什么没有呢?啊,因为咱们还是考虑到后续的一个需求里边啊,咱们没有相关需求,所以他没加,但是呢,其实我们说实话,你建宽表的时候呢,应该怎么样啊。
14:17
啊,也就所所谓的未雨绸缪对吧,你后边虽然你现在后边没有相关需求,但是你保不齐后边可可能之后会出现对吧,之后出现诶你就可能会用到,可能会用到,你就应该把这些东西呢,都给它放在里边,是这样,所以说其他时表的统计值了,我应该也得放在里,但这块呢,它没有啊是这样的啊,应该该有应该有啊应该有好那这张前面语句呢,咱们大致呢,就给大家介绍完了啊,就是即便那些字段它没有出现啊,就是出现的话,其实我们呃统计的方式都很像,基本上就是分组聚合,基本就是分组聚合啊,基本是一样的啊啊呃,既然它没有的话,我们就不考虑它了啊,我们就把已有的这几个字段呢,咱们好好的去求一下就行了啊,这是我们这张表的这个,呃,建表语句咱们就介绍完了啊,首先咱们得明确一行数据是什么,那第二一个呢,得明确咱们每个字段啊是什么含义啊,是这样的,然后最后再补充一点,就是咱这张表呢,它是分区表,按天分区,按天分区OK,那按天分区的话,你说我。
15:17
每天的分区当中存储的数据应该是什么呢?每天的分区里边存储数据应该是什么呀?每天的分区里所存储的应该就是啥?啥呀,这应该是当天活跃。用户的各种行为啊,对不对,那假如我有一个用户啊,我今天并没有登录,也没有做任何操作,也就是我压根儿就没有使用你这个应用,那你说它会出现在当天的分区里边吗?不会的吧,啊,他说不会的啊,他是不会的,也就是说每个分区里只存储了当天诶活跃的用户的行为。把这个搞清楚啊,这是咱们这张表的这个最终结构,咱们就介绍完了啊好,那我把视频录一下。
我来说两句