00:00
好,上一节我们讲到了DM层和DWD层的维度建模的四个步骤啊,那分别是选择业务过程,生命力度,呃,确认维度,确认事实啊,那为了让大家能够有一个更加直观的体会啊,在本节中啊,我们会实际的去演示一下这维度建模的四个步骤,在我们实际进行维度建模的时候呢,我们可以借助一个这样的表格啊,那这个表格呢?呃,我们称为业务总线矩阵啊,那它的纵轴其实对应的就是业务过程,那前面我们也讲到讲到过每个业务过程是不是对应一个实时表啊,那其实也就是说我们的纵轴就是是实表,呃,那它的横轴其实就是纬度表。啊,那表格中间的这个对勾表示什么呢。啊,其实表示的就是事实与维度之间的关系,例如那我的订单详情和用户诶是有关的,那OK,我们就可以在呃他们两个的交叉处呃打一个对勾啊,是这样的啊,这个就是我们呃进行维度建模的时候需要使用的一个电子表格啊,我们叫做呃业务总线矩阵啊。
01:11
好,那接下来呢,我们就实际的去操作一下。来,我们拿一下上边维度建模的四个步骤,那一会儿我们实际操作的时候呢,就对照着这个步骤去做啊好,那现在我截个图给它盯在屏幕上,然后打开一个Excel电子表格,呃,这个电子表格我们就用来绘制这个业务总线矩阵啊好,那现在我们按照这四个步骤啊,开始进行我们的维度建模,那首先我们看第一步选择业务过程,呃,选择业务过程这一步呢,我们要做的是什么工作呀,是不是选择感兴趣的业务线对吧?但实际上这一步我们做的工作是什么呀?是确定我们有哪些实时表对吧?因为一一条业务线是不是就对应一个时时表啊,对吧?好,那现在我们开始选择咱们的业务线啊,那电商当中最核心的一个业务线,那是不是就是订单对吧,那我们选择一个订单业务线,那接下来继续,那我们还会有什么支付。
02:06
啊,然后加购还有什么呀啊,比如说这个收藏呃退款啊退单吧啊退单还有什么呀,还有退款啊然后呢,下边还会有呃评价对吧?呃评价那还会有这个,比如说优惠券领用啊对吧?那这个呢,就是我们呃电商当中啊最核心的几个业务啊OK,那现在我们实际上第一步就完成了啊好,第一步完成之后,我们看第二一步啊声明力度,声明力度这边呢,有一个要求就是最小力度对吧?啊我们要确定诶最小力度啊好,那实际上这一步我们要做的是什么呀?是不是就是确定每张时表当中每行数据所指来的是什么。没错吧,那现在我们开始去声明每一张试试表的力度,先看第一张啊,呃,这个订单啊,那订单试试表每行数据应该指的什么呢?这个很多同学他可能上来之后就会,呃,脱口而出,那订单十秒当中每行数据就是一个订单,那这个对吗?那这个显然是不太准确的啊,那咱们回顾一下之前我们所讲到的电商业务的那个业务表啊,那跟那个业务表当中,跟订单相关的表是不是有两个呀,对吧?一个是older info,一个是older detail对吧?那older info那它的每行数据是什么?
03:24
那是不是?呃,一个订单呀,对吧?那o detail当中每行数据是什么呢?那是一个订单里边的一个商品项对吧?那这两张表的力度谁大谁小啊,那显然是older detail这个力度是最小的对吧?啊,那所以说我们这个订单实时表的力度应该跟谁保持一致啊,是不是应该跟订单明细啊,也是older detail保持一致。没错吧,那也就是说实际上我们订单时表的每行数据应该是一个订单当中的一个商品项,这个大家一定要注意,因为我们要选择最小力度啊好,那这边我们为了呃区分,呃在这儿呢,我们写一个订单明细啊订单。
04:05
诶明细好,那接下来我们看下一个实时表,下一时表呢叫做支付实时表对吧,支付实时表当中每行数据应该指代什么呢。那其实就是一次支付记录对吧?啊,一行数据就是一次支付记录,好,那我们看下一个,下一个呢,是加购实时表,那加购实时表当中每行数据应该是什么呢?应该是一个用户购物车当中的一个SKU,没错吧?那下一个收藏,那收藏实时表当中每行数据,那就应该是一个用户对一个SKU的一次收藏记录对吧?那下一个啊退单,那退单时表当中每行数据就应是一个用户对一个SKU的退单记录啊,那退款呢,就是一个用户对一个Su的退款记录,那评价呢,那就是一个用户对一个SKU的一次评价记录,那优惠券领用呢,那显然就是一个用户对一个优惠券的一次领用记录啊OK,那第二步我们其实也就完成了,声明力度就完成了啊,那下一个啊,那下一个呢是确认维度。
05:10
确认维度这一步我们实际上做的是什么工作,是确定与每张事实表相关的维度有哪些,对吧?那这个关系确定下来之后呢,我们实际上就能够确定每张事实表当中,那它的这个维度外建有哪些了,是这个道理吧,OK啊啊,那现在我们怎么去做呢?呃,我们可以先把业务系统当中所有的维度列举出来,然后呢,再使用这个对勾去勾选事实与维度之间的关系啊好,那现在我们先把所有的维度列列出来啊,那我们现在列举第一个维度,那就是谁,就是时间维度。啊,为什么先列举这个时间维度啊,我给大家简单解释一下啊,时间维度是数据仓库当中必须有的一个维度。啊,为什么给大家解释一下啊呃,我们的电这个数据仓库啊,它它有一个最显著的特点啊,什么特点就是它会保留历史数据。
06:05
保留历史数据啊,那数仓为什么要保留历史数据呢?保留历史数据有什么好处啊?啊大家来分析一下,你想啊,是不是保留了历史数据之后,我们就能够看到数据随时间的这个变化了,对吧?这相当于我们就多了一条观察数据的方向啊,或者是说我们多了一个分析数据的维度,那这个方向或者维度就是谁啊,就是时间啊,那所以说啊,不管我们这个数据仓库,那它面向的业务系统是什么?那OK,那它里边都会有一个时间维度啊好,那这是第一个维度,那我们还有没有其他维度呢?诶,我们能想到的还有诶用户维度,那还有谁?还有地区维度,那还有这个,呃,电商当中最重要的一个维度叫做商品维度,对吧?那还有什么呢?还有诶优惠券,那还有这个诶营销的活动啊,等等等等啊,那这就是我们现在这个电商系统当中所有的维度啊好,那列举出来之后呢,我们继续往下进行啊,咱们需要去逐。
07:06
个声明,每个事实表跟每个维度表之间的关系啊好,那怎么去确定事实跟维度之间的关系呢?那比如说举个例子啊,那订单明细你就说跟用户有关系,那我的依据应该是什么呢?啊,那依据肯定是业务对吧?啊,那我们在确定事实表与维度表之间的关系的时候呢,我们需要参考啊,之前电商系统当中的业务表关系。啊,是这样的啊,那现在我们打开之前那个表关系图,哎,就是这张,那把图点开来,我们去看一看这块关系到底如何确定啊,那现在我们确定的是呃,订单业务对吧?所以说我们现在先找到与订单业务相关的表,好我们再点亮一下,好那现在大家看到的这个绿色的表,就是跟订单业务相关的所有的表。啊,是这样的啊,那咱们订单实时表的力度是跟订单明细保持一致的,对吧?啊是这样的啊好,那现在我们就逐个去确定啊,那我们的订单实时表跟维度表之间的关系啊,好,那现在我们先看第一个就是时间啊,那时间肯定是有关联的,对吧?那那咱们现在暂时不说,我们看第二个就是用户维度,那订单明细跟用户维度有没有关系呢?
08:20
有没有关系?诶,这个好像没有直接的关联对吧?但是我们可以通过谁可以通过O引售关联上对吧?那所以说订单明细跟用户表是有关系的啊,下一个地区,那订单明细跟省份以及这个region地区表也没有一个明显的这个直接的关联,对吧?但是咱是不是也可以通过诶订单older info去进行关联啊,对吧?那所以说我们的订单实时表跟地区维度表呢,也是有关联的。啊,也是有关联的,好,那下一个啊,我们再继续往下进行,那再往下走呢,我们看呃,订单实时表跟商品有没有关系啊,那显然是有关系的,对吧?那订单明细是不是跟我们的商品是有直接关联的呀,对吧?啊,那订单明细跟优惠券以及活动有没有关联呢?显然也是有关联的啊,也是有关联的啊,那所以说按照我们的分析呢,实际上我们能够确定下来啊,就是这个订单明细实施表呢,是跟所有维度都相关的啊,那所以在这儿呢,我们就可以诶打一个对勾,哎表示哎,他们之间的关联关系啊,OK,我们往右拉一下。
09:25
好,这个关系呢,就建立下来了啊好,那我们剩下的所有的事实表其实都应该按照哎,我们刚才这种方式去确定与维度表的关系啊,但是这就是咱为了节省时间啊,就不再逐个对应着去看了啊,在这儿我们就直接确定啊,他们之间的关系啊啊那现在我们看一下支付,支付跟时间有没有关系呢?显然是有的啊,但其实我们下边所有的实时表是不是都跟时间有关,那所以在这儿呢,我直接拉到底啊,那接下来继续啊,那支付跟用户有没有关系呢?那显然也是有关系呢,那同理,后边所有的这个事实表都跟用户有关,那所以说我们也是直接拉到底。
10:04
那接下来我们再往下走看这个地区,那支付跟地区有没有关系呢?那其实也是有关系的啊,好,那只不过也也得通过啥,也得通过older info去关联,对吧?好大接来继续商品优惠券活动,那此处呢,由于我们支付值表,那它的力度的这个原因啊,因为支付支付值表当中每行数据咱们是一个什么呀?是一次支付记录对吧?那一次支付记录对标的是什么?是一个订单对不对啊,那所以说在这边呢,我们是不能跟具体的商品优惠券和活动关联上的,那所以说我们就不关联了,下一个加购。那加购实时表呢,跟时间用户肯定都是有关系的,那后边还跟谁有关系呢?是不是就是跟商品有关系,对吧,相当于我们这儿就保存了啊,是不是哪个用户在什么时候把哪个商品加到了购物车里边啊,对吧?啊就把这个业务事件保留下来了,好下一个,那下边呢,有啥有这个收藏啊,有收藏,那这个收藏呃,相关的维度应该有谁呢?与收藏相关的维度有谁,是不是时间用户,然后再加一个商品。
11:08
没错吧,那接下来继续退单,那退单相关的维度表是不是就是时间用户加商品。啊,那同理退款也是一样的啊,时间用户加商品,那评价呢,其实也是一样的啊,就是咱们得知道啊,是哪个用户在什么时候啊,对哪个商品进行了评价,对吧?那最后一个优惠券零用,那与它相关的维度应该有谁时间用户外加一个优惠券啊,那这就是我们第三步所做的工作,就是确定每张事实表与每个维度表之间的关联关系。啊,那实际上这一步我们做完之后呢,就能够确定下来,每张事实表当中的维度外键有哪些,对吧?因为只要有一个维度表跟与之关联,跟它有关系,那在这个实时表当中,是不是就有一个对应的维度表的外界呀,对吧。好,那接下来我们看最后一步确认事实,此处这个事实呢,其实指的是每张事实表当中的度量值对吧?那所以在那儿呢,我们再多加一列啊,咱们来一个度量值,好,那现在这个度量值呢,我们也得逐个试时表去确定啊,那因为每张实表它的度量值都是不一样的,对吧?啊,咱们一个一个确定,先看订单明细,那订单明细这边我们的度量值应该有啥呀。
12:21
那首先是不是有一个商品的件数,对吧,咱就不写商品了啊,写一个件数,那有商品的件数,那还有谁啊。那是不是还有一个订单的金额对吧?啊,那除了有订单金额,那还有谁?那是不是还会有一个诶优惠的金额呀,对吧?嗯,为啥?因为咱们的是不是订单明细跟优惠券或者是活动是有关的呀,对吧?那所以说我可能会有一些优惠活动啊,或者是诶优惠券这个减免等等等等啊,所以会有一个优惠金额啊好,那下一个支付啊,那支付相关的这个呃度量值那就是啥呀,那没得说,那就是支付金额没错吧,那接着下一个啊加购,那加购呢,加购这边呢,其实主要就是诶件数和金额对吧?哎,件数。
13:05
件数和这个金额。好,我们继续往下走,那收藏对吧,是不是该收藏了?诶,那对于收藏来说,你说我们的度量值应该是什么。收藏这边好像没有一个件数或者是金额这样的度量值,对吧,那它的度量值应该是什么呢?那其实这里边儿呢,是有一个隐含的度量值的,这个隐含度量值其实是谁呀?其就是一个次数,那这个次数呢,其实是有一个特定的值的,就是几就是一啊,这个次数怎么理解,给大家解解释一下,那收藏时表当中,我们前面提到过,它当中每行数据是不是就是一次收藏记录对吧。没错啊,那所以说我们去对这个收藏尸表进行统计的时候呢,我们只能统计什么呀,只能统计这个收藏的次数,对吧,比如说统计一下某个商品被收藏的次数。没错吧,那我们是不是就只能是根据这个行数去统计啊,对吧啊,因为每一行就表示一次嘛,对吧,所以说它这儿这个所谓的度量值呢,就是就是这个所谓的隐含的度量值次数啊,但其实这个次数这个度量值啊,也不光它有,我们前面这些实表里边其实也有这个次数,对吧?啊,你比如说我们以谁以架构,以这个支付为例吧,那支付时值表当中每行数据是不是就是就是啥。
14:21
是不是就是一次这个支付记录啊,对吧,那所以说它里边是不是也应该有一个次数,这样的度量值也是一对吧?啊这个咱们搞清楚就行了,好下一个那退单,那退单市值表当中,那我的度量值应该是啥呢?是不是应该就是退单的件数和金额对吧?哎,我们件数然后呢,再来一个金额。啊,继续往下走,那退款呢,同样道理,也是件数和金额啊,只不过呢,这个是退单件数退单金额,这个呢是退款件数退款金额啊啊下一个评价评价,同样道理,其实也没有一个明显的度量值,那没有的话,那就是一对吧,一行数据表示评价了一次啊好,继续往下走,那领优惠券领用呢,其实也没有一个明显的度量值,那也就是什么呀,也是一个隐含的度量值次数啊。
15:07
是这样的,好,那到这一步呢,我们就完成了这个维度建模的所有步骤了。啊,那我们完成之后呢,我们来琢磨一下啊,来分析一下,诶在这儿我们都确定了哪些东西,咱们都确定了哪些东西,来咱们分析一下,首先第一个诶,我们已经确定了有哪些事实表了,对吧?哎,比如说这个呢,就是我们确定下来的事实表啊,那OK,我们还确定什么呀。还确定下来了,我们已经我我们需要创建哪些维度表,对吧?啊,是不是还也也确定下来维度表了,对吧?那OK,那现在这就是我们确定下来的各种维度表啊,那除此之外我们还确定了什么。我们是不是通过第二步生命力度确认了每张事实表当中每行数据所指代的内容,没错吧?诶,这个确定下来了啊,那我们通过后边的确认维度和确认事实是不是确定下来了,我们每张事实表的字段是什么?
16:03
啊,没错吧,那也就是说我们现在实际上已经确定了,哎,我们每一张事实表的表结构了啊,有什么实时表,然后表的结构也确定了,那实际上事实表咱们就完成了,对不对?但是维度表呢,我们只是确定了有哪些维度表,对吧?但是维度表的表结构咱们没确定,比如说我的每行数据是什么,那我的字段应该有哪些,是不是咱没有确定啊,对吧?那这个东西咱们怎么确定呢?怎么确定呢?啊,这个其实很简单啊,维表相对来说比较简单啊,那首先我们先说维度表的每行数据是什么啊,维度表的每行数据就是一个维度对象。啊,举个例子,具体的例子啊,比如说用户维度表,那他的每行数据,那是不是就应该是一个用户。没错吧,那地区维度表,那它的每行数据就是一个地区商品维度表,每行数据就是一个商品啊,以此类推啊,这就是哎,维度表的每行数据啊,如何确定,那接下来我们再说维度表的字段如何确定啊,维度表的字段如何确定啊。
17:04
啊,维尔字段如何决定?啊,其实这个也比较简单啊,维度表的字段,那它是不是应该包含该维度所有的属性。对不对?举个具体例子啊,比如说以商品为例,那商品维度表当中是不是应该包含商品所有的属性,那这里边会有什么呀?比如说商品的名称,商品的重量,商品的价格对不对?商品的品牌,商品所属的品类啊,会有123级分类,对吧?那OK,那这些是不是都属于商品的属性啊,对吧?啊,那这些属性我们应该如何确定呢?那其实也是可以根据我们的业务表去确定的啊好,那现在咱们就以商品为例,看看它的字段到底应该如何确定,那现在我们找到这个业务表,然后找到谁呢?找到跟商品相关的所有的表。好,那咱们点一下,那这些标红的表就是跟商品相关的表啊,那这里边儿呢,我们有品牌啊,有什么呀,有分类啊,有平台属性,有销售属性,那这些是不是都是我们这个商品的属性啊,对吧?那后续我们的商品维度表当中呢,就应该包含这些所有表当中的字段。
18:09
啊,其实就是这么去确定商品维度表的字段的啊好,那其余的维度表也都是相同的套路啊,是这样的啊OK,那到现在为止我们就完成了啊,我们这个维度建模的这个啊,这个全部过程了啊,是这样的啊,那到现在为止我们的维度模型啊,基本上也就成型了。那我们再补充一个额外的知识点啊,那现在我们打开文档,看一下文档当中的这个业务总线矩阵。大家注意观察一下啊,呃,文档当中的这个矩阵呢,和我们自己画的那个其实有点区别,区别在哪儿,我已经标注出来了啊,就在这儿。呃,文档当中它的这个呃矩阵呢,要比我们自己画的矩阵多出来了一个实时表啊,这个实时表呢,它所对应的业务表其实就是那个older info,那下面这个订单详情呢,呃,对应的就是那个order detail。
19:04
啊,那我们来分析分析啊,为什么文档当中啊,它要增加一个订单啊,这样的一个实时表呢,就是为什么要增加一个order info这张表。来我们简单分析一下啊,首先我们先来对比一下。这两张表的这个数据量,嗯,大家说这两张表谁的数据量更大一些,那显然是下边这个数据量更大一些,对吧。啊,没错吧,因为它是不是数据更加细致啊,对吧?啊,它的力度更小,那所以它的数据量哎更多啊是这样的啊,首先我们先明确这一点,那其次呢,呃,我们再来呃看一个需求啊,比如我这个需求是什么需求呢?呃,我想让大家统计一下,呃,我们今天呃这个订单金额的总和是多少,大家说这个需求我们可以从哪张表里出啊。是不是从这两张表都可以?没错吧,我可以把今天所有的订单明细全部加到一起,是不是能得到总的订单金额,我也能够把每个订单的总额加到一起,是不是也能得到我们今天的呃,总的订单金额,没错吧,他俩都可以,那你说这两个计算效率谁更高一些呢?
20:11
那显然是不是它更高一些呀,对不对,因为它的数据量要少一些,那这个呢,数据量要哎多一些,那所以说前面这个啊,是不是上面这个肯定是效率要更高一些的啊,那所以说那正是因为呃,会有这样的需求,这些需求有什么特点啊,就是说他可能用不到哎,我们这个订单明细的数据。那是这样的,那如果说我们不给他增加这样的一个订单实时表,那是不是所有的需求我不管用不用得到,都得从订单明细里边取出啊,对吧?大家都知道那这张表的数据量是比较大的,那所以说这里边呢,肯定会有一些这个计算资源的浪费啊,是这样的啊,那所以说在这儿我们考虑到这种情况呢,诶,咱们就可以增加一个older info实时表,那这样一来,那如果说我需要用到最细力度的数据,那我就去从订单详情里边查呃取数,那如果说用不到呢,呃,我就直接从呃,Order in这张表里取数就可以了。
21:07
啊是这样的啊,那也就是说我们最终呢,需要再补上一个事时表啊来咱补一个啊在这儿我们右键,呃,这里边应该是可以插入一行,那这个呢,就是订单,好,那订单与订单设表相关的这个维度有哪些呢?首先啊,这个时间肯定是有的,呃用户呢肯定是有的,那地区呢肯定也是有的啊那商品优惠券活动这个有没有呢?那这些东西因为力度的问题是关联不上的啊,那所以说这儿就没有关系了,那度量值呢,度量值这里边其实主要就是诶订单诶金额还有这个总的诶优惠金额了。好,那这个呢,就是我们呃补充的这个事实表啊,叫做older订单事实表啊,这一点大家要注意啊,就是理论呢,呃确实是呃,让我们保留对细力度就够了,对吧?但是实际呢,我们真正的去呃进行维度建模的时候呢,这个理论我们也没有必要就是完全的去遵守啊,那咱们可以就是有一些优化措施啊。
我来说两句