00:00
啊来咱来看这个关系建模啊,关系建模,那关系建模刚才咱们也讲了啊,就是大家看到的第一印象就是这个表比较多,比较散啊,然后呢,这个表关系比较复杂,嗯,那确实是这样的啊,啊然后大家可以简单分析分析啊,你说他为什么这个表会变成这个样子。为什么会变得这么多,这么散,表示关系这么复杂啊,对,跟范式是有关系的,因为关系建模当中啊,要求咱们。需要去去除数据的容易性啊,去除容易性呢,咱们就得进行范式规范,对吧,进行三分式进行规范啊,那完了之后三分制的时候,咱们刚才也也亲亲自是不是经历了一下啊,那需要不断的拆表,不断拆表,那最终呢,表就会被拆成这种啊,非常的碎啊,你会发现其实有些表里边啊,可能只有。两三个一两个字段对不对啊,但是我也要给它拆开,因为目的就是降低数据的冗余嘛,啊是这样的啊啊,这就是关系建模它的这个特点,建模的时候遵循三分式就OK了啊,那最终我们看一下下边这个总结啊来。
01:03
啊,关系模型如上图所示啊,严格遵循三份式啊,那从图中咱就能看出来,这个表啊,较为松散零碎,表的数量呢,诶比较多,但是数据呢不会冗于啊,不冗余,由于数据呢分布在众多的表当中啊,那所以说这些数据呢,可以被更为灵活的应用啊,功能性较强啊这个灵活咱们怎么理解啊,因为表我现在被分的很细很碎,对不对?那如果我想说我想去获取其中的某些字段的话呢,我能够轻松的这个获取。能够轻松的获取,比如说啊,那我想获取一下,那咱们呃,一共有多少个地区,那你是不是直接找地区表把所有数据查出来就完事了呀,对不对,这里边会有重复的地区出现吗。不会的,它是不是已经是啊,相当于消除冗余的一行一个地区,一行一地区直接查出就行,对不对?那如果说咱们这儿诶并没有进行规范化,那比如举个例子啊,那就相当于我这个consumer上的消费者跟这个地区表,我是不是一张表啊,那一张表相当于是不是地区肯定是有重复的呀,对不对,因为我很多人,那很肯定会有一些人是来自于相同的地区,那所以说我要想获取一共有哪些地区,那你是不是还得把这个字段查出来,然后还得去驱虫什么的呀,对不对啊,那所以说用起来就没有那么方便了啊,你拆的越碎啊,我这个数据就会越灵活啊,越灵活是这个意思啊,确实是比较灵活啊,啊,那这就是咱们这个关系啊,建模的这个啊,几个相对一个特点吧,啊一个特点啊完之后呢,那刚才这个描述的东西,其其实基本上都是好话啊,就是呃,相对来说就是比这个容誉低,然后用起来比较灵活,对不对,氮气它是有缺点的,缺点就是咱们这个数据啊,我用起来呢,会比较啊麻烦,因为。
02:49
什么呀,假如说咱们举个例子啊,呃,咱们看一下这这个模型它描述的是什么东西啊,其实描述的也是一个跟电商相关的,对不对,跟那是不是有O啊O用订单,那比如说我想知道那这个订单啊,那它是哪个地区的订单。
03:07
比如说或者哪康L康R是不是国家的意思啊,哪个国家你这得怎么查呀,是不是得先找他,先找这张表,然后找这个,再找这个,是不是才能找到这个国家呀,对不对?你看啊,你需要去关联这么多表才能得到这一层信息啊,这个用起来的话,我需要去进行各种join啊叭较麻烦啊,而且性能也比较差,因为join的表越多,那我这个查询起来会啊越慢,呃,尤其是什么呢?尤其是咱们这个海杜布体系啊,海杜体系,那海杜体系当中大家都知道,不管底层是mmr啊还是什么Spark,那咱们如果是涉及到drawone,那一般情况下会遇到一个什么样的操作呀,叫做沙Le操作对不对啊,那有沙uffle操作的话呢,那咱们这个大家都知道,沙发实际上是里边有什么排序,有什么分区,这个其实是非常重的一个操作,对吧,那有沙Le,那我就慢,那所以说咱们尽可能的这少一点,那我的沙缝就会少一点啊,查询速度就快一点,是这样的啊,那所以关系模型呢,其实就是有点不太适合于咱们这个海度的体。
04:08
级啊好,那这点咱们先明确啊,那在这儿呢,咱就说这么多就行了,那接下来我们重点来看这个所谓的维度建模来,那维度建模呢,它其实那大家一看就能啊,有一个这样的初步的认识啊,出第一印象就是表少数量少啊,然后呢,表与表之间的关系比较简单,很单纯是吧?啊很单纯啊,不像上边这个关系这么乱是吧,下面比较单纯啊啊那完了之后呢,咱们呃,继续去分析分析啊,分析什么东西,分析一下这个诶维度模型哎,它为什么诶会这么去设计。啊。为什么这么设计,也就是他这个维度模型,它到底这么设计有啥好处啊啊。哎,咱们分析分析啊,大家都知道,首先第一点啊,这个表的数量比较少,关系比较简单,只能看到这一层嘛,那大家能不能看出来一点比较啊,就是深层次的一点一点东西呢?啊就是这么设计它有什么好处啊。
05:04
什么好处啊?方便管理是吗?啊,刚才咱们提到的这个表关系比较少,简单,然后表的数量比较少,这其实确实就是它的一个一个优点,对不对啊,那它有这样的特点,那这个模型,那咱们用起来是不是就比较容易啊,也就是这个模型呢,是比较好理解的。比较好理解的啊,那假如说同样的模型,这个模型和这个模型啊,我摆在这儿了,然后呢,咱们公司来了一个新人,我是不是需要去熟悉咱们这个模型啊,对不对,那你说关系模型跟维度模型哪个熟起来更容易,很显然这个更容易对不对,这个更好理解,而且呢,有一点啊,咱们现在还没有看这个表的内容,对吧?那一会儿看了表内容之后呢,大家就会发现啊,就是这个维度模型其实啊,更贴近于我们人的思维啊,更贴近人类的思维,怎么贴近啊,你看一下啊,它其实是哎以业务哎为驱动的,就是这个维度建模呢,是以业务为驱动的啊来咱们看一下啊,这张表当中中间。
06:06
哎,咱们有一个表,那这张表呢,它里边这叫什么呀,叫做订单表对吧,订单表,然后这张表里它有什么样的字段呢?你看一下。前面这一大堆字段全是啥,全是ID,各种did干什么,是不是关联外边这些表了呀,对不对,还有一个字段叫sales amount,它是不是那个什么相在订单的金额对不对啊,这是一个金额啊,是这样的啊,然后你看它周围这个表都是啥。周围这个表多少啊,比如说这个date日期表,呃,这个product相当于是呃,产品或叫做商品表对不对,那下边location啊,地区啊,这个呃,Customer啊,这是啊,顾客啊,是顾客对不对啊,那后边呢,什么这个order的一些信息啊,然后什么sales RI,这个应该是这个,呃,相当于发货那个仓库地址啊,那这边呢,还有一个。还有一个真的真的是性别对吧?啊,其实这个放在这儿不太合适啊,放哪比较好啊。
07:03
放这其不是比较合适对吧?啊,那比较合适啊,那这个无所谓啊,这个无所谓啊,行,那咱们大致呢,给大家把这个表里内容咱们介绍了一下啊,然后你来看一看这个东西它是不是比较贴近咱们人类的思维啊,这块你通过这个模型,你能描述出来一个什么样的东西,是不是能够把咱们用户的下单的这个业务给描述出来。是不是你看一下啊,这个你有了这个模型,相当于是你一看就知道了是哪个,诶客户在什么时候,什么地点啊,然后呢,买了哪个仓库当中的什么商品。哎,对不对,然后呢,花了多少钱。对不对,你看啊,这个模型是不是一下就把咱们这个一个具体的下单业务就给咱们描出来了呀,对不对,就是你看到它之后呢,很容易理解啊,很容易,这就是他的这个,呃,一个建模的一个就是这种建模方式的,就是一个非常重要的一个优点,方便理解,便于理解。
08:02
啊,但是呢,如果说你看上面这个关系模型,我现在要想知道哪个用户啊,在什么时候,在什么地方啊,然后在哪个仓库当中买了什么商品,花了多少钱,你这个一眼能看出来吗。你这个意见其实你不太好看出来对不对啊,这个太乱了,乱七八糟的啊,是这样的啊,那所以说那很显然下边这种建门方式呢,以业务为驱动,方便理解,这是第一个啊,OK,咱们先把这点明确啊,方便理解,那第二个优点啊,那是什么呀。这个表少表关系比较简单啊,这个东西都可以归为第一类啊,就是方便理解吗?对吧,那第二类有什么特点,有什么优点,第二类啊啊,就是得益于我这个表与表之间关系比较简单是吧?那所以说我查询的时候呢,咱这个数据会不会draw,也会draw,但是不会draw太多层对吧,也是咱们的沙Le呢,相对来说要少很多啊,也这种建模方式查询性能要好于关系模型,这是肯定的啊,那还有没有第三点呢?
09:06
第三点是什么呀。第三点啊,就是说咱们这种维度模型啊,更适合做数据的分析啊,做哪种分析呢?那种聚合分析啊,就是它更适合做聚合分析啊,因为咱们数仓本身就是一个分析型的一个系统,对吧?啊,那所以说维度模型既然更适合做分析,那我就用它呗,啊它为什么更适合做分析呢?啊,这个我们再来分析一下啊,为什么更适合做分析,那咱们要想知道它为什么适合分析,那咱们得知道啊,就是这种,呃,数仓里边咱们的分析主要是哪种类型啊,咱们主要是哪种类型的分析啊。就是聚合分析,更多都是聚合分析啊,但是咱们聚合呢,一般情况下不会说就是直接让你把某某个字段进行聚合啊,那先问一下大家,大家说如如果说我们要聚合的话,你说我们聚合的是什么样的字段呀?就以这一大堆表为例,你说咱们聚合的应该是谁呀?
10:01
是聚合什么慢ID啊,聚合什么older这个东西,就是聚合这些东西吗?是吗?不是,你说聚合的应该是谁呀,聚合的是不是肯定是这个。咱们那个可以度量的一个字段呀,对不对,比如说金额呀,比如什么次数,比如说个数,你是不是肯定聚合的它们呀,对不对,比如说求个和呀,求个平均值啊等等等等啊,你肯定聚合的是这样的值啊,但是一般情况下,咱们去做分析,去统计,我们不会说只聚合一个这样的值就完事了,那你比如说我只把这个值聚合一下,那我是不是就得到了一个总的一个金额呀,对不对,那这个对分析,对数据分析来说有意义吗?其实没有多大的意义,这不就是一个孤零零的值吧?啊,那咱们去分析的话,一般情况会分析什么呀?哎,会分析啊,是谁哪个因素会影响到我这个度量值。啊,就是哪个因素会影响到我这个销售金额对不对,那怎么去分析这个问题啊,那你是不是就得去看一看,OK,我不同地区的啊,我的销售金额比如说总和哎是多少啊,就是统计一下每个地区,那我的销售金额总和是多少,那我可能啊还要去统计一下什么呀,不同性别的啊,男男客户啊和女客户他们之间这个呃,不同的性别,我的这个消费金额分别是多少啊,那可能还会去看日期啊,可能还会去看其他的一些信息。
11:22
对不对,那咱们是不是应该是这样去分析这个数据呀,啊,也就是说我们去进行统计分析的时候呢,我们肯定会带着一个什么样的字段呀,就是外边这一圈表当中的一个字段,或者是多个字段啊,去看一看到底是哪些因素诶会影响到咱们这个销售金额啊,那是不是得到这些这层关系之后呢,咱们能够干啥呀。是不是能够根据这个结果去做一些这个相应的一些比如说营销活动啊,对不对啊,是这样的啊,OK,那也就是说大家得知道后续我们的这种分析啊,我们一般情况下不会说直接就把这个度量值给它聚合起来啊,我会带着一个外边这层表当中的某些字段。
12:02
啊,那怎么去得到咱们这样的结果呢?比如说我现在呢,就是想知道我的不同地区,我的销售金额这个是多少啊,销售金额总和是多少,那你怎么去统计啊。以这个模型为例,怎么统计啊?呃,不同地区,比如说咱们是以这个location name啊,以它为例,那怎怎么去得呀,是不是咱们应该首先用这个中间的表去和谁去和下边这张表进行一个join对不对得转,转完之后呢。在干啥呀,是不是应该是分组聚合对不对,按照location内进行分组,把一个地区的这个所有的订单聚合到一起,然后呢,对订单金额,比如说求一个总和啊,或者求一个平均值啊,是不是都可以,然后呢,你就可以看到订单金额和咱们这个地区之间的关系了,哎,我就能知道哪个地区多,哪个地区少比少的呢?OK,我给你刺激一下对吧,给你降个价什么的啊,是这样的啊好,那这个就是啊,它的这个这这这这层意思啊,就咱们分析都是这种分系啊,那我现在呢,是看的是地区和咱们这个金额之间的关系,那我有可能还会看性别跟哎金额之间的关系,那怎么做,是不是就拿中间这个表跟外边这张表去做一个啥。
13:13
也是做一个关联啊,关联之后呢,按它分组,然后对它聚合对不对啊,你看啊,我这个其实我做所有类似的分析啊,你不管你前面那个呃,字段是啥啊,你其实你这个做法都是一样的,都是怎么做,都是拿中间这个表跟外边的表啊,进行一个draw完之后呢,然后分组聚合对不对,是不是都是这这么去操作就行了呀,对不对啊,但是假如说你现在啊,咱们不用这个模型了,还是用关系模型。我也要做类似的分析,你看你还好做不?还是刚才那个那个啊,刚才我们要分析的是什么来着,哎,刚才我要分析不同地区,那我订单金额,那这个怎么做,你看看这会咱们得怎么做啊,首先得先找到地区对不对,那这是地区吧,找到了那还得找到什么呀,每个地区的那个销售的金额对不对,那销售金额在哪存着呢呀。
14:04
这放着呢,你就得找了,你就找了啊,那首先这是不是有那玩这这是不是有那个sales amount对不对,所以说你得关联它,关联它,关联它诶你才能关联上啊,那我现在呢,我又想去分析一下不同性别,那我这个订单金额哎是什么样的,那你就怎么办,是不是得找他对不对,然后呢啊得找他,那找他之后找谁呀?啊找他,那找他这儿有这个针的吗?哎有一个针的ID对不对,那找人得找针的,还得找他对不对啊就是你这个要分析,做这种分析的话呢,就比较麻烦了啊,每一个需求可能这个关联的表都不一样啊,但是你用关用维度模型的,那基本模式都是相同的啊,就是这个东西呢,我们做数据分析那会更容易。啊好,那这就是咱们维度建模的它的几个这个呃,几个特点啊,首先第一个哎,方便咱们理解这个模型,因为它是以业务为驱动的,哎更符合咱们人的思维,那第二一个呢,就是这张这种表,因为我撞的比较少,所以沙布比较少,那我性能比较高,那第三一个呢,就是更方便我们去做这个数据的分析。
15:09
OK,那这就是维度监管啊,维度监管它的特点啊行,那咱们接下来呢,给大家引出两个概念啊,两个概念啊,就是在维度模型当中啊,你会发现啊,我们的这个表啊,诶会有一个中间的一张表,然后周围呢,还有一圈表,对不对,那中间这个表我们是有这个固定的名称的,中间这个表咱们管它叫什么呢?叫做事实表啊,这就是事实表,然后外边这一层。啊,这是什么东西啊,这是。哎,叫做维度表啊,中间的叫事实表啊,外边这一圈都叫维表啊,是这样的啊,相当于这里边咱们这个模型,这个事实跟维度,哎,我所描述的应该都是啥啥啥样的,所存储都是什么样的信息啊。咱们先说维度表吧,维度表里存储的都是啥呀?都是对这个事实表的一些描述信息。
16:04
对不对啊,都是一些描述信息啊,那当然呢,咱们是从什么呀,是从这个呃,模型去描述这个业务这个角度去考虑的啊模型咱们用这个模型去啊,去存储一个业务事实的时候呢,咱们确实是这样的啊,维度表当中存了一些描述信息啊,然后中间呢,对应的是你那个具体的下单业务对不对啊,是这样的啊,那如果说我们从这个数据分析这个角度啊,咱们去考虑啊,从数据分析去去考虑啊,那维度表当中存储的都是什么呀。就是咱们分析这个数据的角度。维度表里存储的就是我们分析这个数据的角度,或者分析数据的维度啊,你比如说我现在呢,想看的是什么呀?是地区表里边这个location name和sales amount之间的关系啊,那你这个location name就是什么?就是你去分析订单金额的一个维度吧,啊或者一个角度啊,那你往这个地方看,你就说看这个gender啊,那gender name你想看它和这个之间的关系,那gender name就是你去分析sales amount的一个维度,是这样的啊,就是你得从不同角度去看啊,如果咱们从啊这个事实再重复一下啊,这个这个维这个模型,哎,如果说从他,哎如何去描述这个业务这个角度去考虑,那维度表当中我所存储的就是一些描述信息啊,就是谁在哪儿,然后干了什么,是不是就是这些东西啊,这个谁在哪儿,然后什么时候等等等这样的一些描述信息,然后干了什么,实际上是事实表所描述的,我干什么呀,我买东西了,花了多少钱,花了这么多啊,是这样的啊啊。
17:40
那这是从描述这个业务去去考虑,那如果说我们从数据分析这个角度去考虑的话呢,那维度表当中我所存储的就是分析这个,哎,数据的角度,或者分析数据的维度啊,好,就这么去理解啊,行,那维度模型咱们先呃先说这么多,然后一会呢,咱们再去,呃详细的再去说这个事实表跟维度表这两概念啊,一会儿咱们再详细的说啊,我先把事实视频录一下。
我来说两句