00:00
啊,好了,各位同学,那咱接下来呢继续往下进行,那下边呢,我们要讲的内容是维度表的一个设计啊,OK,那前面讲过维度模型无非就是事实加维度,对吧?事实咱们基本事来看一下维度啊好,那现在我们来先看一下维度表的这个概述啊,来看他是怎么说的,他说维度表呢是维度建模的基础和灵魂,呃,刚才上面是不是提到了什么事实表是维度建模的核心呀,对吧?那其实也不用管什么核心是啥,这个基础和灵魂怎么去理解,诶不用管你就知道什么就行了呢?诶事实表和维度表呢,是不是同样都是非常重要的,对吧?好,那接下来继续往下走啊,来,我们往后走,那前文提到了说事实表它是围绕着什么,围绕着U过程去进行设计的,对吧,而咱们的这个维度围绕什么设计。是应该围绕着业务过程所处的环境进行设计啊,对吧?哎,这个应该很简单,所谓的环境呢,无非就是何时何人何地,对吧,就这些东西,好,那接下来咱继续往下走,我们来看一看维度表它的主要内容是什么,来往后走,那维度表呢,它里边主要包含一个主见和什么呢?各种维度字段啊这样的,其实咱们可以去看一看我们前面的那个图啊,来往上翻找到维度模型的那个图,大家来看,那这是不是就是一个一个的维度表,没问题吧,一个一个的维度表,对吧?你看这些维度表,它的这个字段都都是都是怎么去怎么去整的,是不是?首先我有一个自己的主见,对吧?每一张维度表都得有主见,为啥呢?你是不是得用诶试表去跟它进行关联啊,对吧?哎,这个一定要搞清楚好,那玩意就除了主见之外呢,就是各种各样的维度字段了呗,对吧,OK,你比如说日期维度当中,我会有与日期相关的这各种字段,对吧?那产品这个维度呢,我会与我会有与产品相关的各种各样的字段啊,是这样的啊好了,那实际上呢,这个所谓的维度字。
01:47
字段我们在这儿呢,是有一个特殊的叫法的,我们管它叫做什么呢?往下走来,咱们看一下,我们管这些维度字段叫做什么呢?叫做维度属性。啊,是这样的啊,也就是说一个维度表,那我通常就包含一个主键,然后再加上各种各样的维度属性,这就是维度表的这个字段内容相对来说是比较简单的啊好了,那维度表的基本概述咱们就讲完了,完了之后我把这个视频停一下啊。
02:12
呃,来高同学,那咱继续往下进行,就刚才呢,我们已经把这个维度表概述角了,下边我们要考虑的问题就是什么呢?就直接进入到这个维度表的设计了,就是维度表在这儿呢,我们不会像师表那样还去分个什么几种类型,对吧?咱们暂时不分类,我们直接就是它的一个设计步骤,好那我们来看一看维度表的设计步骤到底是什么样的,来咱们一个一个看啊,那在这儿呢,我们一共有这样的三个步骤,我们先把这个步骤过一下,第一步就是什么呢?确定维度或者叫做确定维度表,那第二步是什么呢?确定主维表和相关维表,好,那再往后第三步是什么呢?是确定维度属性,OK,那在这儿呢,咱们是不是一共分了这样的三步啊,对吧?后边就没有了,OK,那虽然我们这三个步骤看起来跟前面那个事实表的设计步骤没有任何关系,但我可以告诉大家,那这三个步骤呢,它仍然是在指导我们如何去建表,他仍然在指导我们到底要建哪些维度表,然后呢,每张维度表的结构引发什么样的结构,是不是还是分?
03:13
诶,行和列呀,对吧,实际上还是在指导这些东西,那所以咱接下来呢,就从这个角度去理解一下这三个步骤,我们先看第一步就是确定维度表,那我可以告诉大家,这一步实际上在告诉啥呢?我们到底要建哪些维度表,在维度模型当中到底有哪些维度表,它实际上是在告诉我们这个事儿,好,那我看一下这个怎么去做啊,来把这块咱们读一下,他说在设计事实表的时候,我们已经确定了与每个事实表相关的维度了,来这句话体会一下。我们在设计师表的时候,是不是有一步是确认维度啊,对吧?咱们是已经确定了与每张师表相关的维度了,对不对?好,那接下来继续往走,那理论上呢,每一个相关的维度,我们是不是都应该对应一张维度表,大家说是不是,你比如说我们以下单为例啊,下单我相关的维度有谁呢?用户商品地区,那我是不是得有用户维度,得有商品地维度,得有地区维度啊对吧?理论上应该是这样的,对吧?好,那么之后我们继续往下走,那我们需要注意到一个问题,什么问题呢?就是可能会存在多个事实表与同一个维度都相关的情况,诶有没有这个情况啊,有啊,对吧,你比如说我下单这个事实表跟用户有关,我支付我跟用户是不是也有关啊,对吧,就出现那这种情况,大家说我们应该怎么处理呢?我是给每张实时表都去建一个用户维度表,还是说我只见一个用户维度。
04:28
只建一个还是建多个呀,就建一个对吧?就是在这种情况下呢,我们要保证维度的唯一性,就是同一个维度我只能有一张维度表,对吧?那完了之后呢,我只创建一张维度表即可,对吧?那这样一来是不是咱们就知道我到底应该建哪些维度表来,对吧?OK,说白了就是你去找来看我们这些实时表都跟哪些维度相关对不对?相关呢?我是不是就给他建一到维度本那就完事了,对吧?哎,但是呢,诶,光去做到这一步还不够,我们还得考虑到另外一种情况,另外一种什么情况呢?咱们往后看,他说另外如果某些维度表的维度属性很少,哎,这个怎么理解?
05:03
什么叫某些维度表的维度属性很少啊,啊,对吧?维度属性这个其实很简单,维度属性指的是什么呢?维度属性是不是就指的你那个维度表里的字段呀,说白了就是对吧?OK,哪个维度属性它可能会比较少呢?有同学刚才提到的时间,其实时间这还真不少,就是与时间相关的维度非常多,大家可能能想到只有一个年月日,对吧?但是你要知道我还可能会有什么呢?比如说我周几对不对?那我是一年当中的第几周对不对?OK,我是第几季度对吧?那完了之后呢,我今天是不是节假日,是不是工作日,这些是不是都是与日期相关的属性啊,对吧?这个还真不少,那在这儿我给大家举一个少的啊,比如说谁比较少呢?我们以支付这个业务过程为例,支付这个业务过程啊,那你想想支付这个过程它应该跟哪一个维度有关系的呢?什么用户时间,地区这些都有关,咱不多说对吧,在这给大家说一个,还有一个什么呢?就是支付方式,那想支付方式你说算不算是支付的一个维度啊,对吧,应该算对不对,那支付方式我们这儿可能会有什么呢?比如说有支付宝,微信,银联,是不是就这些东西,那想这个维度它的。
06:04
属性会很多吗?不会,是不是就是一个这样的文字描述就完事了,对吧?诶支付宝银联或者是微信就是这么一一个字段,基基本上是不是就够了,对吧?那这就属于这种维度表的属性很少的这种情况,好,那这种情况下我们可以怎么做呢?我就可以不去创建这个维度表了,那不去创建维度表,那这个维度表的属性我怎么处理呢?你不见维度表,那这个属性我怎么处理呢?哎,我直接把该表的维度属性增加到与之相关的事实表里边,诶是这样就啥意思呢?假如说我这儿呢,有一个支付的时表对吧?那OK,那在这儿呢,我直接在这个表里边加个字段,那就叫什么字段呢?就叫支付方式,里边放的就是支付宝,微信也脸等等,是不是应该是这样的一个操作啊,对吧,那这个操作我们称之为什么呢?维度退化。这也是一个术语啊,什么叫做维度数下呢?或者维度退化呢?那就是把某些维度表当中的维度属性,我直接给它加到哪儿,直接加到与之相关的事实表里,那这个操作就叫维度退化,哎,这1.1定要理解一下,那所以说是不是维度退化这个操作也会影响到我去确定维度表的这个步骤了,对吧?因为有些维度我可能不需要真正的虚线表,我可以给它退化到视表里边去吧,对不对?那这一点咱们要注意啊,OK啊,好了,那这实际上就是我们再去确定这个维度表的时候的,呃,这个一个一个操作,对吧?首先第一步我们要做的工作就是找与每个时值表相关的维度,找完之后你还得再去考虑一下,是不是有些维度你需要去做退化的操作,对吧?你要是做退化,是不是这个表咱就不用再去见了,对吧?这一点咱们要理解一下,反了呢,既然提到这个维度退化了,那在这儿呢,我们就延伸一下,那首先我们需要补充一个概念,就是关于事实表当中的字段,其实前面咱们提到过,说事实表呢,我们标准的实表它的字段就两类,一类叫什么维度外建一。
07:50
类叫什么度量值,但实际上呢,我们要考虑到维度退化这个概念,你会发现实际上它里边还应该会有第三类字段,对吧?那就是什么呢?这就是我们退化进来的这个具体的维度的属性啊,对吧?啊,没问题吧,OK,那这一点咱们先给它补充上,好,那还有一点就是啥呢?就是说我做了维度退化之后,对不对?那它有没有什么优点,有没有什么优点,比如说我把某个维度啊,它里边的属性退化到了一个与之相关的是本有没有优点呀,有啊,对不对,我是不是就将来再去拿这个维度属性的时候,我就不需要再去做额外的join换了,对吧?我直接从事试表里边就能拿到我想要的这个维度属性了,还是这样,也就是维度退换是能够怎么样能够提升我们这个维度模型的计算性能的,这一点咱们要搞清楚啊,OK,但也不是说我所有的属性都要退化到这个实时表当中,对吧?那按照我们刚才说的,你你维度退化是不是能够提高查询性的啊,对吧?那我要不要所有的维度属性都退化到时表呢?要不要这个其实不能这么去做,为什么呢?如果你都退化到师表里边,这里边肯定。
08:50
会有大量的什么东西数据冗余,对吧?这个大家应该是能想明白的啊啊在这儿我还是举一个具体例子,我们就还以支付方式为例,支付方式假如我们一共有三种,分别是哪三种啊?诶,分别是支付宝,微信,银联,假如说就只有这三种,那你要是在是在维度表里边去存,是不是只需要存三行数就行了,没没问题吧,但是你要是把这个东西退化到支那个支付实时表里边,OK,你想一想这些东西你会存多少遍呀,会存N多遍对吧?对不?你是不是只要有一条支付记录,你就会存一个这个支付的方式,只要一条支付记录是不是就得存一个支付方式啊,对吧?那所以这个东西你会冗余的存储非常多倍啊,是这样的啊,那所以说如果都退化,那我们这个存储性能就会,呃,存储开销就会比较大啊,是这样的啊,所以这一点咱们要给它搞清楚啊,也就是不是所有的咱们都要退化,这个酌情而定就完事了,好了各位同学,那这就是我们第一步确定维度表的这个呃步骤,那这一步做完之后,咱们基本上就已经知道了,我在整个维度模型当中到底要建哪些维。
09:50
表了,这个应该是能想明白的,对吧?好了,接下来我们就晚上了,你想一下,你说下边我们该做什么事,下边其实我们就应该去设计每张表的表结构了吧,对不对?OK,好,那我现在问一下大家,你说我们每张维度表这个表结构的设计灵感应该来自于哪呢?对吧?比如说我现在要设计一张商品维度表,对不对?那这张维度表的表结构无非就是每行是什么字段有啥对吧?你说这个灵感我们应该来自于哪儿呢?
10:17
应该来自于业务系统吧,对不对?我们是不是得从业务系统里边去找,找什么,找与商品相关的表对吧?比如什么SKU,比如说什么s puu啊,比如说品牌分类等等,这些是不是都是与商品相关的表,对吧?我们得把这一对表都找到,然后是从这一堆表里边去寻找这张伪一对表的设计灵感啊,对吧?北应是这样的一个逻辑啊好,那所以接下来我们看看下一步是干什么,下一步我们要做的工作呢,就是确定主维表和相关为表,好,这个所谓的主维表相关为表又是一个新概念啊,这个当然非常简单,给大家解释一下就知道了啊,那我们来看它到底是啥东西,往下看,他说了,此处的主维表和相关为表呢?均值业务系统里边与某个维度相关的表啊,是这样的啊,比如说在这儿咱们举个例子啊,将来我是不是要设计一个所谓的商品维度表啊,对吧?那我们刚才提到了,你要想设计商品维度表,你的设计灵感是不是来自于业务系统对吧?所以说我们需要先去业务系统里边找到与商品相关的那一对表,那无非就是谁呢?SK份,SSP份basemark。
11:17
Base category321,这是不是就是SQ的信息,S po的信息,还有品牌的信息吧,后边这是两个信息分类的信息吧,对吧?那这些是不是都是与商品相关的表对吧?那所以说我们现在要做的工作就是啥呢?是不是就从这里边去找商品维度表的一个设计的灵感,对吧?好了,OK,那这一大堆边找出来之后呢,我们需要给它分个主次啊,需要分一个主次,那最主要最核心的那张表呢,我们称之为主维表,那其余的表呢,我们称之为相关为表,那这个表咱们到底怎样去确定呢?谁是主为表,你看到这张表之后,你凭直觉你觉得谁是主为表,SKU应该是主为表,对吧?凭直觉确认它,那这里边我们其实有一个,呃,就是不成文的一个规律啊,通常情况下谁是那个主维表力度最细的那个是主维表,通常情况是这样的啊,那咱们这里边力度是不是就跟行相关呀,对吧,那你说我这张表一行代表的是一个什么,一个SKU对不对,那完了之后我这个呢,一行是不是一个S。
12:17
Puu,对吧?你要知道一个s puu下边是不是会有多个SKU啊,对吧?那同理,我一个品牌下边是不是也有多SKU,我一个分类下边是不是也有多SKU对吧?那所以从这我们能看出来,SKU应该是最细力度那张表,那所以通常它就是咱们那个主维表,OK,那就在这就定下来了,其实SKU呢,我们就称之为商品维度的主维表,那其余的呢,我们就称之为商品维度的相关维表。好了,那这一大堆表咱们都找到了,接下来咱们是可以开始去规划我们这个商品维度的表结构了,对吧?表结构无非就是什么行和列嘛,对吧?好,那现在我们来看一下这个维度它的行到底怎么确定,那通常呢,这有这样的一个说明,那维度表的力度通常与主维表相同。
13:02
能理解吧,啥意思呢?也就是说力度是不是就是跟行是相关的呀,对吧?那也就是说我这个商品维度对吧?那我每行数据所代表的含义和谁是一样的呢?和SKU这个是不是应该是一样的?说白了就是这张维度表,我一行是不是应该是一个SKU啊,对吧?OK,好,那这样一来的话,我们这个行基本上就确定了,那当然呢,我们需要按照同样的方式把第一步当中确定下来,那每个维度边的行都给它确定下来,好,那都确定下来之后,我们接下来是不是就可以开始去设计最后的列了呀,对吧?好,列如何确定呢?看第三步,第三步是就是所谓的确定维度属性啊,对吧?维度属性指的就是维度表当中的字段,对吧?好,那我们看一看这个列到底如何确定啊,来往下走,这说了确定维度属性就是确定维度尔斯的,这个废话不多说啊,往后走,那后边呢,他怎么说的啊,说维度属性呢,主要来自于我们业务系统当中与该维度相关的那个主维表和相关表,大家想想是不是这么回事,比如说我现在呢,想设计一个商品维度表,对吧?那你说这个维度表的字段应该来自于哪呢?不就。
14:02
应该是来自于这一大堆表对不对?有SKU的信息,SKU信息,品牌信息,分类信息都拿过来的,对吧?啊是这样的,好,那我们从这张这一堆表里边去拿这个维度表的字段的时候啊,咱们有两种方式,一种方式怎么做呢?是我直接从主维表或者是相关维表里面去选择,就是与照搬对吧,原封不动的拿过来,SK这有一个比如说SKU的名称直接拿过来啊,S pou有一个s pou名称直接拿过来等等等,你可以直接从里边拿,或者说你还可以怎么做呢?也可以通过进一步的加工得到,那就假如说,呃,比如说我们这张表当中有几个字段,对吧,那这个东西我将来我用起来不方便,对吧,我就可以直接怎么做呢?诶,我对某几个字段,比如说我进行一个拼接的操作,我进行一个加工的操作,然后呢,得到一个新的这个字段放在咱们这个维度表当中啊,也就是我去获取字段的时候呢,两种方式,一个是直接取自于主位表相关表,一个呢是基于主位表和相关表当中现有字段,通过加工进一步的得到,哎,是这样的。
15:02
啊,那这就是我们确定维度属性的这样一个具体的方案,当然这个所谓的加工可能不好理解,直接拿大家就能想明白对吧?那这个加工怎么加工呢?一会儿我会给大家举一个具体的例子了,到时候一说大家就明白了,啊,好了,那也就是这一步,咱们要是做完了之后,大家想一想,你说我们是不是就已经把咱们这个维度表的结构基本上确定下来了,对吧?第一步我们已经确定下来了,OK,我到底有哪些维度表对不对?那第二步呢,我是不是已经确定了每行是什么力度确定了对吧?好,那第三步是不是确定这个维度的字段,咱们也就完事了对吧?好,那就这四个步骤做完之后,那我们整个维度表是不是就基本成型了,对吧?就是这样的一个逻辑啊,好,这个完成之后视频我听一下。
我来说两句