00:00
呃,好了,各位同学,那咱接下来呢,就来看一下我们DWD层的第一张事实表,第一张实表它的表名叫什么?咱们看一下,叫做交易与加购事物是表,对吧?从这个表面上我们就能看出来,它所对应的业务过程是不是就是那个加购车的业务过程啊,对不对?OK,好,那接下来呢,我们要考虑的问题就是啥呢?就是这张表它怎么设计,对吧,对吧,我们其实还是原来那个思路嘛,就是拿到一张表之后,你需要先去设计它的表结构,然后呢,再去琢磨它的数据装载应该怎么做,应该是这样一个逻辑吧,对吧?那现在咱们先来分析它的表结如何设计。哎,它的表结构怎么设计。它的表结构怎么设计,大家心里应该很清楚吧,这不就是一个典型的事物实时表啊,事物实施表是不是会有那个固定的设计流程啊,对不对,选择一个过程,生命力度确认,维度确认是是不是就这样一个固定的过程,那我们是不是只要把这四个步骤咱给它做完,理论上这个表结构应该就能呈现出来吧,对不对?OK,那接下来呢,咱们就试着去做一下啊啊,当然在这块呢,我们可以参考一下,咱之前就是准备好的那个业务总线矩阵,咱们去找一下,咱照着它看是不是更清楚一点啊对吧,找到业务总线矩阵,然后呢,往下翻,我把这个完整版这个电子表格咱给它打开来,首先我们看第一个业务过程,呃,我们现在呢,讲的这张这个实时表所对应的业务过程是不是就是这个架构嘛,对吧?好,那现在咱们就来按照我们这个就是标准的这个设计步骤,咱们去走一遍啊,首先第一步选择业务过程是不是已经选择出来呀,是吧,这个就不多说了,那接下来就第二步是不是声明力度啊,对吧,但力度我是不是就在这儿给他声明一下就完事了,对吧,但是声明力度的时候我们是有要求的。
01:40
什么要求来着,一定要选择最细力度或者最小力度对吧?那完事之后呢,那看一下咱们这选择最终力度是什么,我们选择的力度呢是诶一行数据代表的内容是一次加购物车的操作,但是他这么说其实说的不是特别的具体啊,啊这个具体你得怎么说呢?你得精确到什么程度,对吧?你那一行得精确什么程度,你得精确到是谁啊对吧,在什么时候对吧,把什么购物车啊不什什么购物车,把什么商品加到了这个购物车里边,对不对,应该是这样的一个,呃,这个力度才可以啊,是这样的啊,这就是咱们声明力度这一步要做的工作,声明力度对应的是什么来着,对应的是将来咱们这张表的那个表结构当中每行所指代的内容,对吧,诶来,那现在行咱就确定了,接下来我们继续往下走,是不是该第三步来对吧?第三步是确认维度对吧?那你说与加购物车相关的维度,那都有啥呀?啊,那首先咱们能想到的是不是就是这样的三个维度?
02:40
用户时间商品对吧,谁在什么时候把什么商品加到了购物车里,这几个肯定是有的,对吧?那至于其他的维度呢,那比如说举个例子,地区维度,那理论上这个应该跟架构是也是有关系的,对吧?但还是那句话,由于我们业务系统这边,咱们模拟生成的数据没有考虑到这一点,所以我们这儿呢,没办法获取架构跟地区的联系,所以在这儿呢,我们就选不上了,诶这一点大家要稍微的理解一下啊,那实际上是这样的,就是包括以后大家在公司里边,假如说你真正的需要去负责这个从零到一的这个数据仓库的一个设计,对不对,你真要去负责,那你再去比如说确认维度的时候,对吧,你像这些步骤相对来说都是比较灵活的,对吧?对不对,你在确认的时候呢,你你是不是有可能会多选一个,也可能会少选一个呀,对吧,对不对,那我少选会有什么样的问题呢。
03:28
比如说我就是没有没有选权对不对,因为可能你刚到公司,你对他的公公司的业务不是那么的熟悉,对吧,不是那么的熟悉,我是不是选的时候我就可能会漏选呀,对吧?这个会有什么样的后果呢?大家想想,你就比如说我设计师表对吧,某个维度本来有关联关系,我没选上这个对将来咱们这个数仓的使用会产生什么样的这个影响啊,其实就会导致某些需求可能做不了,就比如说举一个具体的例子,咱这儿就以人为例呢,就以地区为例,假如说我们这儿本身就是跟地区有关的,但是呢,你选的时候你就是忘了选了没选上对不对,那将来假如说我有这样的一个需求,什么需求呢?比如说让你统计一下,呃,各个地区对不对,我这个用户加购的次数对不对,比如说北京啊,这个今天加购了多少次,对吧,那上海这个用户加购了多少次,你想算这样的指标,你能算出来吗?你就算不出来了,是这个道理吧,也就是说你漏选了某些维度之后,会导致某些需求咱们就做不了了啊是这样的啊,那当然呢,如果说你漏选了,但是我将来呢,我也没有这样的需求,没有这个跟地。
04:29
类需求,那其实就没什么影响,是这样的啊,就所以说这个选择维度或者确认维度的时候,相对来说比较灵活,对不对,你可能会漏选,那实在是漏选了,那将来真有类似的需求,那没办法,你只能怎么做呢?只能是是不是修改咱们这张实表对吧?啊,也就是我们数仓前面就提到过,咱们数仓你设计完之后,它不是一个一成不变的,对吧,你是需要不断的去迭代,不断去更新的,对吧?你将来设计的有缺陷,那没办法,只能是后期再进行修改,是这样的,那所以说我们在最开始设计数三的时候呢,我们在确认这个与业务过程相关的维度的时候,就有一个要求,什么要求来着,就是尽可能多的去选择与这个业务过程是不是相关的维度啊,对吧啊,是尽可能的多,能有关联的,一定要要给它关联上啊,这个一定要注意啊,当然你也不能瞎选,你不能说我把这个所有东西我都给它关联上,有的你关联起关联不上,对吧,他八竿子打不着对吧?比如举个例子,你加购物车跟我推单类型,它有关联关系吗?他没关系啊,对吧,你得是符合业务逻辑,那才能关联上,这个一定要理解啊,行了,那这个选择维度咱们就有。
05:29
事了,你这个维度选择完之后,将来其其实就相当于确定下来什么了,是不是确定下来我们这张实施表里边有哪些维度外建了呀,对吧?诶这个应应该也是能想明白的,好,我们继续往下走,看到接下来我们进入到最后一步,最后一步呢就是啥?就是确认事实对吧?确认事实其实就是确认我们这张事实表的度量值呗,对吧?那对于加购而言,度量值主要就是这个加购了几件商品呗,对不对,那完之后,当然这里边还有一个隐含的度量值,就是那个次数一没问题吧,啊OK啊好了,那这四个步骤做完了,那大家现在从脑海里想一想,想象一下能不能想象到将来咱这张表的表结构是什么样的,应该差不多能想象出来对吧,那基本上呢,就是OK,我这张表它会有如下这些字段,哪些字段呢?说有用户ID哎商品商品ID时间ID对不对,后边会有一个加构的是不是件数上对吧,基本上是不是就是这样的一个结构,然后里边的每行就是一次加构操作,诶基本上就这样一个结构啊好了,那这个完成之后,我们呃去看一下,最终咱这张表的建面水去看跟我们所设计的所规划的是不是。
06:29
一回事啊,来,那现在我们找到加购物车这张实物时表,来,我们把这个表的前面语句拿出来。来放在这个位置吧,来来最底下啊CTRL位好,各位同学,现在我们一起来看一下最终的这个键表语句,呃,先来看一下表明吧,表明呢叫做DWD,然后的是trade trade是不是就是交易的意思啊,对吧?这个是哪一部分来着,指代的是数据域吧,这是不是咱那个数据域对不对,Trade交易域啊好,接着往下走,Card ADD,这是那个业务过程是加构,然后INC呢,是不是它的一个增量标识啊对不对,因为因为咱这张表是一个什么表,是一个事务时表,事务时表咱是不是都采用这种增量表啊,对吧,这个理解一下好了,那接下来我们继续往下看啊,表明完事之后明确一下它的分区规划,分区规划呢,是不是还是分成行列分区,我们先看行啊行,刚才说了一行就是一次加购操作,那我们需要精确到是谁在什么时候把什么商品加到了购物车里,没问题吧?好,这个行明确了,接下来就是看列了啊,列无非就是两部分维度,加上不良没问题吧?好,我们先找维度来看一下哪些是维度。
07:34
用户ID,商品ID,时间ID,这是不是都是维度对不对,跟我们刚才规划的是一致的对吧?接下来往下走,那再往下度量是不是就是SQ number就是度量啊对不对?诶你会发现除了这个我们刚刚所讲的维度和度量之外,是不是还有一部分字段对吧?剩下的这部分字段到底是什么?我给大家简单说一下啊,首先先看这个cur time,呃,这其实质量就是一个具体的加构时间吧,对不对?这个data ID其实也是加构时间,它俩有啥区别呢?
08:03
呃,实际上data ID它是用来关联谁的,关联我们那个日期维度表的吧,对吧?OK,那你想一想,关联日期维度表你应该用什么去关联,得用年杠月杠日去关联吧,对不对?所以说我们刚才看到的这个表的date ID,它里边存储的只有年月日,那这个cur time里边存的应该是什么呢?就是带十分表的是时间,这个叫日期,这个叫时间啊,这个要搞清楚,这个是年月日,这个是年月日十分秒,哎,给它搞清楚好了,那完之后呢,我们再来往下看,下边这儿是不是还有几个字段呀,对吧?这些是啥呢?来我们简单看一下啊,这里边有什么?Source ID source type,对吧?Source的意思是什么?是来源的意思对不对?OK,那这个来源指的是什么的来源呢?呃,所实话这个呢,你要想搞清楚这个必须得了解一下,诶咱们这个业务系统当中的相关的业务才行,那所以说接下来呢,我们需要去业务系统当中去看一下这个字段,它具体的含义是什么,那我现在可以问下来,你说琢磨琢磨,你说这张表它主要的数据应该是来自于哪一张表。
09:04
业务型应该是来自于英雄那张表的,应该是加购购物车那张表吧,对吧?应该是car ino那张表啊,所以这个soft ID其实也是来自于那张表的,所以现在呢,我们打开这张表给大家简单解释一下啊,找到car的风那张表来打开,打开之后呢,我们往后看啊,往这走,往这走,大家再坚持一下,我把这说完就下课休息啊来看一下这个位置,这是不是就有一个所谓的source type和source ID啊对吧?那我们来看一看这个source type是什么意思,呃,二四开头的一个编码对吧?那现在我们找到贝斯A,找到二四开头的编码,二四在哪,在这儿,诶,在这儿对吧?OK,这是一个来源类型对吧?你看都有啥用户查询,商品推广。智能推荐促销活动,这个是不是就是咱们这个所谓的来源类型啊,对吧?诶这个是什么意思呢?给大家简单解释一下啊,实际上所谓的来源类型它指的是什么?指的是我这条加购的记录对不对?是用户通过哪种途径去完成的对不对?是用户自己搜索商品之后去加的购物车,还是说诶我们通过智能推荐对吧?我给他推荐了这个商品,然后呢,他加的购物车,还是说是通过我们的一个促销活动对吧?那玩用户看到这个商品,然后呢,去加的购物车,实际上是指的这样的一个来源,OK,好,那我右边这个所谓的ID又是什么意思呢?这个其实就很简单了,比如举个例子啊,假如说诶我这个商品呢,是通过一个促销活动来去加到购物车里边的,好,那你是来自于哪个活动。
10:27
对不对,那我这是不是得给你保存一个相应的ID啊,对吧?OK,是这样的,也就是说这里边呢,哎,它是记录这个具体的那个来源的ID的,这一点搞清楚就行了,好了多同学,那这就是我们这两个字段的含义,那你说我们业务系统它去设计这两个字段,它有啥含义啊,它有啥用啊,咱不考虑数仓里边啊,你说我们业务系统里边它设计这俩东西有啥用?其实可以用来统计一些我这个活动推广的这个效果,对吧,对吧,比个举个例子,那我这个活动对吧?诶,我这个就是办了一个促销活动对不对,那我这个促销活动,诶,我引我我我导致了有多少人这个加购,导致了多少人下单,诶然后导致了多少人支付等等等等,是不是可以根据这个去衡量我这个活动的一些这个效果啊,对吧,是这样的,那包括去衡量一些我这个推荐是否准确等等等等,是这样的,这一点稍微理解一下,这就是这俩字段的作用。好了,那现在呢,我们再回到咱这个事实表的建模上面来,那你说这个所谓的来源,对于我们的这个事实表而言,它应该算是一个什么信息呢?
11:26
是维度呢还是度量呢?再说这个应该算作一个什么信息,应该算一个维度信息吧,对不对,也就是你这个加购对吧,你是通过哪种途径去加的购物车,这是不是应该是一个是一个所谓的维度啊,对吧?那所以理论上维度我们应该怎么做来着,应该建维度表对不对,但是我们这儿建了没有,而是直接把这个信息是不是保留在了市值表当中,对不对呢?所以说这个操作我们称之为什么维度退化对吧?这一点大家理解一下就OK了,呃,完了之后呢,既然就是即便是维度退化啊,即便是维度退化,那我们在设计这个维度信息的时候,也得满足维度的设计要求吧,对不对,那我们前面提到过维度属性有什么要求来着,是不能只用那个编码的,应该是,嗯,至少得是文字与编码共存,对不对,所以在这儿呢,咱们这个type后边是不是也加了一个内对吧?诶这个要理解一下好了,那到目前为止呢,我们这张表的行和列就清晰了,行列都清晰了之后,我们再来明确一下它的分区规划啊来大家说这张表怎么分析,怎么规范分区,看到INC是不是就知道了,对不对,咱这。
12:27
表的是增量分区,我一天一个分区,那每天的分区里放的应该是什么呢?应该是当天的加购操作吧,对不对?15号的架构操作都放在15号它分区里边,14号的架构操作都放在14号的分区里,这就是咱们这张表的一个,诶分区规划好了,那到目前为止这张表的表结构咱们就算是设计完毕了,那下节课我们再去看它的数据状态怎么做啊,好,大家赶紧下课休息会儿吧。
我来说两句