00:00
呃,好,各位同学,那咱接下来呢,继续往下看,下边我们来看维度模型这个概念,OK啊好,那先简单的介绍一下维度模型啊,维度模型呢,它是数仓的另外一位大师对吧?那另外一位大师他叫什么呢?叫做rap kboard对吧?那他所倡导或者说呃,也是他提出来的啊,是这样的啊,那这个模型是由这个人提出并倡导的,OK啊好,那维度模型它的这个核心的思想是什么呢?我们往后看,维度模型的核心思想是将复杂的业务通过事实和维度两个概念进行呈现,诶,那实际上呢,呃,我们在那个讲ER模型的时候,咱们说它的核心思想是什么?是将所有的数据用实体加关系进行呈现,对吧?当然在维度模型呢,是用实体加维度进行呈现,呃,就是用事实加维度进行呈现啊,那这个事实在这指的是什么?维度指的又是什么呢?哎,这个非常关键,我们一起来看一下,来我们往后看,他说事实通常对应业务过。
01:00
课程OK啊好,那完了之后呢,我们业务过程这个概念,我上午的时候是不是已经给大家提到过了,对吧?哎,我说这应该是当做一个特殊的概念去对待,对吧?那什么叫业务过程来着?往下看,业务过程可以概括为一个一个不可拆分的行为事件,比如说我们电商交易当中的下单对不对,取消订单啊,然后呢,确认收货对不对,然后呢,什么退单退款或者有付款等等的,这些我们都管它叫什么呢?业务过程一个原子的操作,我们称之为是一个业务过程,这1.1定要搞清楚,那也就是样大家应该能够感受出来,业务过程它对应的往往是一个什么呀?是一个名词啊,还是一个动词啊,你看这都是啥,是不是都是一个一个的动词,或者一个一个的动作呀,对吧?哎,是这样的,或者说的它对应的是一个一个的什么呢?行为啊,你也可以这么去理解啊好,我们继续往下看,那后边呢,这还有一个概念叫做维度对吧,那维度通常对应的是什么呢?
02:00
对应的是业务过程发生时所处的环境,诶这儿又提到了一个环境,对吧,业务过程发生时所处的环境,比如举个例子,那我这儿有一个下单的业务过程,那你说下单的业务过程当中可能会有什么样的环境?谁对吧,什么时候在哪儿诶下单了什么商品,那这些是不是都是环境啊对吧?还是那个什么何人何时何地等等等等,这些我们都称之为维度啊,是这样的啊OK,好,各位同学,那到目前为止呢,那这个事实还有维度的概念,大家应该有了一个初步的认识了啊,那其实大家呢,可以把事实跟维度跟谁对应一下呢?跟上午的时候我们复习采集项目的时候,对吧?我提到的咱们用户行为日志里边呢,那两类信息是不是做一个对应了对吧?咱们说做买点,我们主要收集什么信息,行为信息和环境信息对不对?那实际上那个行为在这儿对应的就是咱们这提到的事实,而环境对应的就是维度,诶他们是有这个前后的对应关系的,这一点咱们大家先给理解一下就行了啊好了,各位同学,那实际上截止到现在呢,我们就大概已经了解了什么叫做事实,什么叫做维度了,OK,那咱接下来呢,继续往下进行,往下走,下面呢,我们有一个呃。
03:15
典型的一个维度模型,这这个图呢,所展示的就是一个所谓的维度模型,那咱们现在呢,来把它好好的看一看,呃,首先我需要明确的一点是什么啊,就是这个图里边所保存的内容和咱们上边的那个ER模型图所保示保存的内容是一样的,是一样的啊,他俩保表表表达的信息是一样的,好,那接下来我们继续往走,那你看一看,就是你看到这个所谓的维度模型之后,你的第一感受是什么?你看到它之后第一个是什么?是不是这个结构相对要简洁或者是清晰一些呀,对不对,那其实上面也说的很清楚了,它是什么呀,从这个图里边我们是能够看出来的,这个模型相对清晰简洁啊,这个其实确实是这样的,对吧?确实这样的OK,好,那完之后我们再继续深入的去看一下咱们这个所谓的维度模型,那实际上呢,整个维度模型它呈现出来了一个什么东西,一个众星拱月的这样的一个形式,对吧?OK,那呃,中间那咱们是不是有一个表啊在。
04:15
对吧,那外边是不是有一圈表围着它呀,对吧,没问题吧,然后中间这张表跟外边这一圈表,咱们这不是有箭头相连,这个箭头表明的是什么呀?是它们是有这个关联关系的吧,对吧?这一点大家应该是能够搞清楚的啊好了,那完之后我们继续往下进行,那中间这个表我们就称之为什么呢?事实表啊,这个上个班有同学说中间这张表就称为月亮,是众星拱月啊,这个其实就是事实表,就咱们所谓的事实表,事实表我们对应的英文呢,是fact table fact啊OK,好,那完了之后呢,我们周围的这篇表呢,我们就都称之为维度表,那OK,维度表呢,这这个英文对应的是啥呀?是dimension dimension table是维度表,那中间呢,是事实表,外边是维度表,这一点咱们先给它搞清楚好了,那完之后呢,我们来仔细的看一看啊,就这个事实表里边它存放的是什么内容,然后呢,周围的这一圈维度表存的又是什么内容,来简单的了解一下,先看中间,中间这个事实表咱们看一看它存的是啥呀。
05:14
它存的是啥?咱们首先得先明确一点啊,就说你这个事实表它对应的是什么业务过程,为什么你看啊,我们前面讲过,就说我们的事实表对应的是不是就是业务过程啊,对吧?那理论上我不同的业务过程是不是会有不同的事实表啊,对吧?啥意思?比如说我这儿有下单业务过程,我会有一个下单的实时表,对吧?那我这儿有取消订单这个业务过程,我是不是会有一个取消订单的实时表啊,没问题吧?所以说你要想知道这个实时表里存的是什么,你得知道它对应的是什么业务过程,它对应的是啥业务过程。应该是下单吧,明白应该是下单啊,所以说实际上这张表里边存储的应该就是下单这个业务过程,下边一个一个的什么,一个一个的下单操作记录吧,没没问题吧,比如说张三下了一个订单,那我里边是不是会有一行数据与之对应对不对?李四下了一个单,我是不是也会有一条记录跟他对应对吧,也就里边存放的是下单这个业务过程的一个一个的操作记录,这一点需要给他搞清,这是事实表的内容,好那除此之外呢,我们再来看一下外边的这个维度表,里边都有什么信息,好,维度表都有啥信息呢?你看一看,首先那这有一个什么。
06:23
Date date是不是那个日期啊,对吧?然后你要注意,你看这个日期咱们给它分开了嘛,年月日分开了吗?没有分开,它是不是在同一张表当中啊,对吧,在同一张表当中,那它肯定会出现什么情况来着,数据的冗余吧,诶这一点应该是能想明白的啊好,那接在咱们继续往下走,那这儿呢,还有一个product,这不是那个商品信息对吧?在这儿还有一个location location里边是不是有我们的那个地地址国家的信息,对吧?然后往后走,这儿还有一个什么customer,是不是那个,呃,顾客的信息啊,对吧,等等等等,你看也就是说我们周围这一圈维度表当中存储的就是什么信息,是不是就是谁,对吧,在哪儿,然后呢,在什么时候,对不对,他下了这个单对不对,下单是不是记录在咱们这个事实表当中啊,对吧,那完了之后呢,买了什么商品,是不是在这儿存着呀,对吧,然后呢,其实还有一个资就是花了多少钱,对吧,你下单是不是得花钱呀,对吧,花了多少钱呢?诶是不是在事实表里边有一个四有对吧?那这个就是你花了多少钱,对呀,其实你通过这样的一个维度模型它。
07:23
应该是能够描述一个一个的具体的事件的,对吧?他能够描出来到底是谁,在什么时候对吧?OK,那下单了什么商品,花了多少钱,他是不是能够把这样的一个完整的业务操作事件给他描述出来,对吧?那这其实就是维度模型所呈现出来的一个思想,一个中心思想啊,是这样的啊好了,那同学,那截止到现在,咱们对这个维度模型已经有了一个初步的认识了啊,然后呢,我再提醒大家,你注意观察,事实表跟我们的维度表他们之间是相互独立的吗?是不是不是独立的对吧?我事实表当中每行数据是不是都会去跟外边的这个表进行关联呀,对吧?OK,那我每条数据对应的是一个下单的操作,对吧?OK,那你这个下单操作是哪个用户去下的单,对不对,OK,你是在哪儿下的,诶你是买的什么商品,你是什么时候下的,他是不是得去关联相应的维度表里边的信息啊,对吧,是这样的,那所以他们之间不是相互独立的,是有关联关系的,这一点大家要给他搞清楚好了,那是维度模型,我们基本上就有了一个初。
08:23
做的认识了啊好,那接下来呢,我们再来看一下下边这段话是如何对维度模型进行描述的,来看一眼,他说维度建模是以数据分析作为出发点的,诶这个跟ER模型那个是不是有所区别,对吧?比尔一盟它不是以数据分析作为出发点的,它就是以整合数据作为出发点的,对吧?而维度模型就是以数据分析作为出发点的,那既然以数据分析作为出发点,那言外之意那就是啥?是不是它应该是更适合做数据分析的,对吧?OK,好,那接下来我们来看一看他到底怎么适合做数据分析啊OK,他说他是为数据分析服务的,因此他关注的重点是什么呀?是用户如何更快更快更好的完成需求分析,以及如何实现较好的大规模复杂查询,诶,这样的一个响应性能啊,这样的OK,那他关注的重点是这样两点,那言外之意就是啥呢?是不是他应该是在这两点是比较擅长的呀,对吧。
09:23
也就是说维度模型它应该是能够让用户更快的完整需求分析,能够具备这种较好的大规模复杂查询的响应性能的,啊应该是在这两点应该是有好有有这个优点的,对不对?好,那接下来咱们就来分析分析,那他在这两点那到底是不是做的更好呢?那首先我们先看第一点,这个维度模型能让用户更快的完成需求分析,能不能让用户更快的完成需求分析能不能。能不能,那应该是可以的,为什么这个咱们从呃这样的两呃几点去考虑一下,首先第一点就是你看到这个模型之后,你是不是也有感觉这个模型很简单对吧?我是不是只需要看一下,我大概就能明白这个模型想表达的含义啊对吧?是不是就是谁在什么时候对吧?诶那哪儿下了什么订单,是不是就是这些信息你基本上一眼就能看出来对吧?那所以你看你一眼就能看出来,那我其他的这个数仓的用户是不是基本上也能一眼都能看出来对吧?那也就是啥意思呢?这个模型它非常的简单,非常的简洁,那完之后呢,我们后边的用户在用它的时候,是不是这个使用成本是比较低的对吧?诶,那所以说我们诶就能够节省一大部分的就是熟悉模型的这个时间,对吧,那基本上我看到它之后,我基本上就可以开始用它了,对不对,那这样一来就能够更更快的去上手去使用这个数据,所以说这一点咱们大家应该是能够体会得到的啊OK,那咱接下来呢,我们就再举一个具体的例子啊,我们看一看这个东西是不是用起来真的像我们所说的。
10:51
那样简单到底是不是OK,好,那现在呢,我们跟之前那个模型做一个对比,咱们之前用那个模型,咱们是不是做一个需求啊,对吧,咱们统计的是什么来着。
11:01
2020年各个国家的订单总额对不对?好,那完之后我们看一看,诶这个需求我们用维度模型去做的话,那那他应该是怎么去做的,那来吧,咱们开始吧。怎么去做呀,这个东西2020年的订单总额对不对?那首先你得先找到谁,是不是得先找到那个订单总额呀,对吧?订单总额往往在哪张表里存着呢?是不是肯定是在订单的事实表里边存着,没问题吧?首先你需要先找到订单的事实表,是不是已经找到了,对吧?总额就在这放着,那接下来呢,你需要干啥?是不是需要拿到这个订单所属的什么来着?时间对不对?还得拿到订单所属的国家对不对?好,那从哪去找这个时间跟国家呢?这是不是很明显,时间你就去时间维度这里找,国家你就去地区维度这里找,没问题吧,那是不是只需要我们去给他做一个简单的关联,就能拿到时间和这个,诶,当然这个国家他这可能没写出来啊,当然是不是理论上应该是有一个country name的呀,对吧,他只有ID国家没写出,假如他有啊,好,那我们就已经拿到了,拿之后接下来怎么做呢?是就直接对页进行过滤,对con name进行分组,然后对金额进行求和,那这个需求是不是咱们就做出来了,对吧?OK,那这个其实看起来应该是相对来说要比前面那个简单的OK啊。
12:13
好,那其实咱们通过这一个例子,可能说服力还不是那么的强啊,OK,那那完之后呢,我在这儿我再举一个例子,比如说在这儿呢,我们的需求变了,哎,我们不再算刚才那个指标了,我们算啥呢?我们想算一下,比如说2020年的,然后呢,各个分类的商品的销售总额。注意啊,是2020年各个分类的商品的销售总额,大家想想,你说这个应该怎么算,咱们现在还做一个对比,我们先用上面这个模型去算,你用这个模型算,你要算的话,你该怎么算?是不是首先也得先找到订单总额呀,对吧?订单总额是不是在这儿呢?对吧,先找到,找到之后呢,是不是还是得找日期对吧?你找日期是不是又得跟它关联,跟他关联,然后再找到页明且吧,还得找到啥,还得找到你这个商品所属的分类吧,对吧?OK,那你是不是得去关联商品,关联它,关联它完了之后呢,是不是才能找到我们需要的时间和分类的信息,没问题吧,然后呢,按它过滤,按它分组,然后最终对它进行求和,没错吧?OK,你你会发现这个需求你实践起来仍然是比较复杂的,对吧?啊,是这样的,好,那完之后我们往下走,你再看它呢,这个我们要算一个怎么算,是不是直接找到订单这张时时表对不对?找到与之相关的这个时间维度,再找到谁与之相关的商品维度,是不是直接能拿到异要和这个分类的信息,那我们就直接按照时间过滤,按照哎这个分组,呃,按这个分类信息进行分组,对吧?那之后呢,对他进行求,那就完事了,对吧?你会发现啊,就是用这种维度模型去做我们刚刚那种指标的时候,它的套路都是固定的,都是固。
13:45
固定的怎么去做呢?是不是都是找到对应的实时表,然后呢,实时表去找相应的维度,然后呢,对维度的字段进行一个什么呀过滤或者是分组对不对,你看那刚才咱们是不是按照对这个时间维度进行过滤,然后呢,对谁对这个他其他的字段是不是进行分组啊,对吧?哎,通常都是按照时维度字段进行过滤或者是分组之后呢,再再干啥呢。
14:08
是它的事实表里边的那个数字类型的一个值进行一个聚合就完事了,对吧?哎,那这样一来我们就能解决绝大多数的这个类似的指标了,对吧?也就说我们大多数指标都是这样的一个固定的套路,诶那在这儿呢,大家应该是能够体会出来了,就是说我们这种维度模型呢,它用起来它确实是比较简单的,对吧?诶首先模型简单,再一个呢,我们用它去算类似的指标的时候呢,是不是都是固定的套路,对吧?那所以说这样一来,我们用户在使用它的时候,就能够更快的去完成需求分析了,诶这是维度模型的一个,诶第一个优点,那接下来我们再去往下啊,那他还说了,说他是不是也应该能够实现较好的大规模复杂查询的响应性能啊,对吧,是不是这样的呢?那显然是的,对吧,你会发现诶咱们在用它去做这个各种各样的指标的时候,我们最多最多是不是也就是用事实表跟维度表join一下就完事了,对吧?我们会像E模型那样JOIN1大串的表呢?是不会的,对吧?那所以说我这个join的比较少,那我呃是不是杀性的就。
15:09
少一些对吧,那完了之后我的这个计算的性能是不是相对来说就高一些啊对吧?诶是这样的,那所以这一点咱们应该是能够体会到的,OK啊好了,那截止到现在呢,我们应该就诶深刻的把这段话给它理解了,咱们就知道为什么维度建模啊,维度模型是更适合去做数据分析的了,诶这一点咱给得搞清楚好了,那咱们说了半天啊,我们平常说的都是啥,都是维度模型的优点对吧?哎,咱们说它简单好用对吧,然后性性能还高对吧?说的都是它的优点,那你说它有没有缺点,维度模型有没有什么缺点,显然是有缺点呢啊,维度模型有一个非常明显的缺点,那就是啥呢?就是数据它是存在冗余的,对不对,这个冗余主要是在哪有冗余,是在事实表里冗余还是在维度表里冗余?很显然是维度表对吧,维度表里边是存在大量的数据冗余的啊,是非常的不规范的啊,是存在大量的数据冗余的,OK,好,那么这个数据冗余对于数据仓库而言,这是不是一个非常。
16:09
常严重的问题呢,咱们得分析分析对吧?再想想数据冗余对数仓而言是不是一个非常严重的问题,是不是,哎,是不是咱们得分析对吧?首先数据冗余咱们之前就提到过,它主要会带来两个问题,一个是对存储空间的一个浪费,对吧?那还有一个就是数据的不一致性问题,对吧?好,那我现在先看存储,存储对于我们害物数仓而言,你说这叫个问题吗?那肯定不叫,对吧?我们数据在HDFS上,我可以无限的扩展,对吧?那所以说存储肯定不是问题,那接下来就是数据的一致性问题了,对不对?那数仓里边我们这个数据一致性问题,诶会不会有什么影响啊,其实这个也没有太大的影响,为什么?你要知道啊,就是数据冗余之候,什么时候才会出现这个所谓的一致性问题啊,不一致性问题什么时候才会出现,是不是得得得得在你去随机的修改某条数据的时候,对吧,你有的成功了,有的没成功,是不是才可能会出现咱们所谓的不一致性。
17:09
问题对不对,那在数仓里边我们会去随机的修改某条数据吗?我们通常不会,数仓里边的数据,我们通常都是怎么办呢?就是往里写,写进来之后几乎是不会再去随机修改的,是这样的,所以说那这个一致性问题对于我们数仓而言也没有啥影响啊,是这样的啊,那也就是说在这儿呢,呃,我们这个所谓的数据冗余对于数据仓库而言不是什么大问题,所以在这儿呢,我们是能够接受它的啊,是这样啊,所以说那综上所述呢,实际上维度模型不论从哪个角度去考虑,是不是都更加的适合我们现在的这个数据仓库的,诶,这个建模啊,对吧?那所以说我们呃数据仓库的建模了,目前主要采用的都是维度模型,这个ER模型用的就是非常的少,ER模型还是那句话,主要应用在是不是关系型数据库的这个模型设计上了,对吧,这一点大家体会一下就可以了,行了,这个完成之后我把视频停一下。
我来说两句