00:00
好,那2345这四章都是讲这个建模的,因为第六章呢,就开始准备环境了,对吧,都开始讲建模的啊,那这个东西呢,大家已经学习过了,我也不说不讲,但是呢,我也不对着这个来讲了。啊,我就以复习总结的方式给大家来聊这个事儿可以吧啊,这样的话你会学到更多一些啊,就是你得学会自己总结,其实这个事儿你得自己总结对吧?啊,自己总结最好啊,但是你要自己没总结,来听一听我的好吧,好,那接下来呢,23454章啊,我就放一块来说了,不展开说了。建模,建模呢,我们分为两件事情啊,一个呢是建数仓建模的一个准备工作啊。啊,这个是准备好。对吧,啊,我们要做这个建模要一个准备工作,就是你得有哪些,比如说诶有这个前置知识点啊,对吧,你要会哪些个知识啊。
01:06
对吧,啊,你要掌握哪些,掌握到什么程度啊,你得知道啊,那么我们在这里边,我们要掌握到什么呢?第一个。ER模型。嗯,压模型,也就是说我们建模呢,有两种方式对吧?啊一种呢维度建模,还有一种呢,关系建模压模型对吧,这里面最重要的一个三番式吧。啊,当然它呢三分是啊。主要应用于Java对吧,啊Java e。它主要应用于这个。JAVA1对吧,好,那我们想一下这个三方式。第一范式第二范式第三范式对吧,分别是什么?来想一想啊。第一范式是什么对吧?它有什么作用啊,那第二范式又是什么?
02:03
呃,又有什么作用,那第三范式指的又是什么?对吧?当然还有四五对吧?啊这些东西都有,但是呢,我们一般来说到第三范式是不是就够了呀,到第三范式如果说你满足第三范式其实就够了,对于我们这个关系建模而言。对吧,好,那我们想一想啊,第一份是叫什么。第一份是叫什么?不记得了,来想一想啊。像这复习的点,我们就一块来想一想。啊。这个都忘完了吗?这那我就直接说了。啊啊,终于有人延迟,是延迟这么高吗?还是咋啦,对吧,第一个肯定是属性。
03:05
不可切分或者说切割或者分割都可以对吧?啊都一样一个意思嘛,属性不可分割这个保证了什么保证了。数据的可用性,大家想是不是?对吧,你要属性还可以切割你这个表呢,都用不了,你未来怎么用啊。对吧,这是保证这个事儿啊,第二范式讲的什么。第二份是。嗯。第二份是。叫什么?哎,不允许。存在着部分函数。依赖对吧,就是去除部分依赖啊,没问题啊,它有什么作用呢。它有什么作用?很简单,减少数据。
04:03
冗余。对吧,好,那第三份是呢。对,叫不允许。存在。传递函数依赖对吧?它干什么?它的好处是什么?呃,第一,减少数据冗余。还有什么?还有一个什么。就是除了它能够解决数据冗余问题,还有什么?微信啊,数据一致性吧。可以保证这个数据的一致性。对吧,啊,可以保证数据一致性,OK,这就是第一个对吧,啊一压模型啊,就主要是聊了一个三分式啊了解一下第二个什么呢?维度建模维度模型对吧。
05:08
维度建模的维度模型,那这里面有什么呢?这个就比较简单了,第一个新型模型。新型模型对吧,新型模型呢,它实时表。周围只有一级维度。对吧,啊,这是试水表,呃,水水表周围只有一级维度,第二个呢是雪花模型。雪花模型呢?尺表周围有多几维度?有多级维度对吧,还有最后一个概念叫星座模型啊,当然星座模型呢,它跟上面两个还是不一样的,它指的是什么?有多个实时表对吧。好,只要你多个时时表构建的,哎,那就是一个星座模型啊,在星座当中的每一个时时表,你可以是星型,也可以是雪花,这个没关系,不冲突。
06:03
对吧,这是我们的维度建模里边的一个点啊。好,那这就引出来了两个概念啊,一个实时表,一个维度表的一个概念,那接下来呢,我们就看一下实时表和维度表这两个概念,以及它的一个处理,对吧?在我们现出单建模里边应该怎么处理,按照什么方式来做处理,对吧?好,那第三一个呢,我们就聊实时表。这都是我们准备工作,这都是一些概念性的东西。对吧,啊,都是一些概念性的东西啊好,那第一个呢,就是聊一聊它的一个概念呗,对吧,我们写一下概念。呃,事实表应该怎么去说啊,这个概念如果让你描述,你应该怎么怎么说。就是或者说怎么去看这个表是是不是一张实时表。怎么去做这个区分对吧。
07:09
啊。业务流程当中的业务过程。啊,就是一个业务过程对吧。没毛病以及什么,呃,最重要的看表中是否有可以。啊,或者说有什么是否有度量值。所谓的度量值呢,就是可以这种做累加的值,对吧?啊可以累加的值。就是累加值有意义才行,对吧,比如说个数对吧,呃,件数。40。还有这个金额对吧,类似于这样子的,诶那这些东西呢,嗯,表里边有这样的数据,那你就可以认为是一个时表啊,其实就是业务过程。对吧,好,第二个我们要了解的什么呢?关于实时表,它的一个同步策略。
08:03
同步策略。对吧,应该是什么样子的,首先呃实时表对吧,那这种呢,我们讲实表它是属于这个业务表,都分事实跟维度了,肯定是属于业务表对吧?那既然你是业务表,那我们采集有两种方式,第一种呢,Data差对吧,每日全量,还有一种是mal每日增量。对吧?啊,那通常来说呢,我们可以采用什么。通常来说采用这个。增量就可以了。对吧,啊,通常来说呢,采用这个增量就可以了啊。那有一类呢,比较特殊对吧,比较特殊的什么呢?呃,比如说这个。你们里边有没有用过这个全量。在。离线数仓当中,我们哪些表用的是全量还记得?
09:04
对吧,那为什么要用到这个。全料呢?啊,对,你们的家坐车。加购对吧,加购能不能用增量呢。加购能不能用增量了。这也可以啊。加课能不能做呢?其实也可以对吧?好,那更重要的还有什么。比如说啊,我们虽然没有这个指标,但是呢,其实你也考虑啊余额。对吧,如果说你有一个余额的这样的一个。啊,或者说呢,库存。对吧,余额一般是这个金融行业的对吧,余额啊,比如说库存。对吧。类似这样子的,那我是不是应该。用每日全量了,对吧,我就要看,呃,最后呢,有多少。对吧,有多少对存量型指标说的不错,存量型指标对吧,像这样的情况呢,我们可以去。
10:03
用这个每日。全量对吧,诶这个呢,就是比较特殊的啊,用全料就好了啊好,那接下来呢分类。市值表里面还可以继续分类对吧,分好几类啊,那第一类最常用的啊,就是什么呢。师表怎么分类?第一个最常用的,那当然是事物型。实时表。对吧,事务性视表他就满足我们所说的常规的处理方案,对吧?第一步选择业务过程啊,啊那个文档上写的应该是选择感兴趣的一个过程吧,其实这就不是什么选择感兴趣的一个过程,跟你有什么关系啊,你感不感兴趣重要吗?一点都不重要,谁关心啊,对吧啊,那其实领导感兴趣的对吧,或者不得不做的。那就这个过程呗,那就选择个过程就行了,对吧,还是说感兴趣的啊。跟你没什么关系。好选择好业务过程之后呢,我们要声明力度对吧。
11:08
其实针对于我们这种中小型公司,对吧,它的一个表而言的话,我们表其实相对来说这个数量呢,并不大对吧,针对于这种表而言呢,呃,那力度一般来说我们都都要就行了。对吧,所有的市值表都保留啊,因为对于大公司,它可能对于同一个业务工程呢,它存好几张表,那我们选择力度最小的,最细的这个对吧,因为它可以算的指标会更多一些,原先粗力度呢就不要了啊,那第三个第三件事情,那就确定维度对吧。你需要哪些维度啊,最后呢,是我们的事实确定事实。对吧,确定事实,这是事务系实施表里边我们要做的这几件事情。啊,但是事物型实施表它有其他分类啊,因为事物型实表呢,它有缺点。啊,它还是有缺点的,类似于这样的方式,对吧?啊每天呢,增增量导入,然后呢,你就来一条处理掉,来一条处理掉,对吧,容易聚合,这样呢,还是有缺点有不足对吧?不足之处在于什么。
12:14
啊,第一个这种。存量性指标库存型的对吧?啊,就是大家所说的啊,存量指标,我直接把这个拿过来啊。存量一指标。不太合适。对吧,我呢,并不是这种累积的一个值啊。而我只是一个最终的结果,我只要最终结果你每日全量倒过来了,就是一个全量,对吧,那这个用什么样的一个表啊去解决。对吧,啊想一想,这是第一个存量一指标,它不太好做啊,呃,第二一个什么呢。还有一个。涉及到多事实表关联的。多实时表关联的,呃,如果你直接这样去做,把这个数据放在一块儿也不太好。
13:02
对吧,比如说存量银指标,这个我们就不写了,比如说库存金额,为了余额这些东西都是存量银指标,而多时表关联的,那哪些个指标呢,我给大家写一下,比如说我从这个。呃,订单。下单啊。到。支付的平均时长。那很明显,你要把下单这个事实跟这个支付事实给它关联,按照同一个订单ID做join。然后呢,拿到这个支付时间,拿到下单时间一减,然后呢累加求平均值对吧,这就涉及到多时表关联。啊,那这个呢,其实事务性师表他也不太擅长。啊,他也不太擅长,所以呢,就引入了我们还有两种表,对吧?啊,那除了事务性实施表之外,咱们还有个什么叫周期型快照实施表。
14:07
它可以帮我们解决什么问题?存量性指标。对吧,存量性指标啊,这个呢,比较简单一点啊好,那还有一个咱们叫什么。除了周期型,还有一个累积型,对不对。快照时表。啊,快手时表,当然现在你们的离言书仓里边已经不做这个事儿了,是不是已经没有这个累计型快照实时表了啊,嗯,就是没有做类似于这样的一个指标啊,啊,那但是呢,在你们黎言输仓那个文档当中,累积型快照时表是有所介绍的吧,只不过说没有在项目当中带大家去用这个,那其实也比较简单啊,比如说下单到最终的一个状态,所有的状态,对吧,订单状态它是有限个的。本来呢,咱们应该是一个什么状态字段。
15:00
对吧,里面写着诶是下单1001对吧,还是1002,就是用码表的主键来表示的嘛,对吧,1003,诶那但是呢,我们要知道,对于一个订单而言,它的状态呢,是有限个的。对吧,那我就可以把这个东西呢,把它铺平,把它变成一个列,就什么呢,下单时间对吧,然后呢,支付时间把它变成列级别,本来一个状态在这里边去修改,现在呢,变成了一个一个的列。对吧,它就变成了一个一个的列。是不是?啊,就是这样的一个点。好,那之后呢,你下单数据来了,把这时间改了,支付数据来把时间改,诶把这时间改了,那这样我们再求什么,这种多视表关联的数据就就简单了,对吧,我们就这合并到一张表里边,直接聚合到一块了,对吧,直接拿这个时间减它,减它得到每一行,然后呢,一聚合一除好了,求平均值就好了,对吧,这叫累计性块的十值表。
16:01
啊,当时也是拿这个订单举个例子吧,在大家的这个里边啊,好这到这块为止呢,咱们这个实时表就基本上基础知识点就没了,就搞定了。对吧,这基础的一个知识点就搞定了啊好,那接下来呢,我们要讨论的是什么,第四个就是维度表啊。首先第一个呢,我们也是说这个概念啊。那维度表的一个概念什么?没有度量值对吧,它里没有度量值了。没有度量值啊,通常是一些描述性的信息啊。描述信息,比如说用户表里边什么身高体重啊,对吧,啊,或者说你对于订单这个实时表而言,你用户啊,其实就跟大家之前在高中或者初中的时候写作文一样,写那个什么叫。技术文对吧啊,要有几个W几个H对吧,就是谁啊什么时间对吧,什么时间谁。
17:08
啊,在哪儿干了什么事,产生什么影响?对吧,那所谓的这个我们刚才说了,那你看啊,谁在什么时间点对吧,在哪干了什么事,那干了什么事呢?这个是什么,这个事实表事实对吧,而前面的谁什么时间什么地点对吧。这都是属于描述性的信息,那这个呢,都属于维度表。对吧,诶可以这样去考虑啊,没毛病吧,啊这样的一个方式,这是概念啊,我们就不多聊了,呃,第二一个同步策略。我们还是聊这个同步策略对吧,那同步策略呢,通常它都是采用什么。全量对吧,诶跟上反的,它通常采用全量,因为我们表比较小啊,有特殊的对吧,比如说用户用户上特殊呢,数据量呢,对吧,所以呢,做的是。
18:12
怎么样之后呢,还做了拉链表。对吧,啊,比如说用户表的数据量大,那没办法,你要每日全量,每天一个分区,一个全量的用户表数据,这个也挺吓人的,说实话。对吧,好,那在这里边对于维度表呢,我们还要掌握的基础知识点啊,那它就没有什么分类了,那维表哪有什么分类啊,对吧?啊,那就是我们要做的就是维度整合。维度整合啊,维度整合啊,所谓维度整合就是什么呢?因为。如果你不做整合,它应该是一个什么?雪花模型。对吧,我们要把它整成这个新型模型,就要做维度整合,那我们目标呢,就是。目的啊,是为了减少。
19:00
Join操作,还记得在离线书当中我们整合过哪些表吗?有哪些表是通过维度整合出来的?嗯。有哪些表是通过维度整合出来的?平台销售属性。就记得这个了是吗?一日。一日是什么意思?地区活动诶,终于有人达到点子上了啊,地区活动商品不错啊,就这个吧,就是你们说的什么一日,这个我就更懵了,对吧,我的维度整合到到一日有什么关系?不太明白对吧,这边呢,我们主要整合的有这几张表啊,那么有这个商品就是SKU啊。
20:05
SKU加SPU加trade加category。当然K呢有123对吧啊。加123对吧,好,那这些表呢,加在一块儿,形成我们那个什么。叫商品维度表对吧。把它整合到一起的好,那还有没有呢,有啊,省份。行。大区表。地区表。对吧,哎,那这样的话,我们就得到了一个什么。地区维度表。得到一个地区维度表啊,当然当然刚还有同学说了对吧啊,要动求地区加活动,哎,活动也是啊,是的,没问题啊,叫活动信息表。
21:05
加什么活动规则表?形成我们的什么叫活动维度表,对吧,这个叫整合,把多张维度表,咱把它整合到一起,这个叫整合嘛,什么叫整合,这叫整合对吧?看来大家都忘完了啊,所以这次复习总结还是很有必要的啊啊,那这是第三个对吧,叫维度整合,我们做的事情,那其实在这里边呢,我们还做了一件事情。那就是关于用户表的事情了,对吧,啊用户栏里表。啊,用户拉链表对吧,我们对用户表做一个拉链表,因为我们导的是每日增量,你要想拿到全量的用户数据呢,嗯,比较麻烦,你得干什么呀?呃,按照用户ID分组,然后呢,按照时间排序取这个。最大的一条是当天的。对吧,如果说你照前面某一天的,那你要干什么。
22:06
怎么找到,假如历史数据当中,我现在要7月1号对吧,每日增量的,你要去找,你还是要按照什么。用户啊,你要先去过滤。对吧。要去过滤。对吧,那如果说你是每日增量,那怎么去写啊,就比较麻烦,你得找这个时间对吧,找什么时间呢?比如说呃,我现在要7月1号的这个当天有多少用户。对吧,我不是要7月1号新增了多少用户,那你找那个分区就够了,你你每日增量倒过来的,对吧,我要当天这一天。我要这一天怎么样呢?他有多少用户,总共有多少用户。对吧。好,那。应该怎么写,我们要日期啊。我们要过滤对吧,怎怎么去写日期要在这个范围内,什么范围内呢?它的一个,嗯,按照时间排序。
23:10
按照时间排序对吧?啊,先先这样啊,你要的是7月1号的数据嘛,就是你先过滤出这个分区对吧,过滤7月1号及以前的分区,7月1号以后的不要了,先做这个过滤对吧?啊,7月1号过滤啊好,那么接下来呢,按照用户分组取最大的值了,对吧?那你要取这种历史数据太麻烦了,你想看你要做这事,所以才会有我们这个拉链表嘛,他获取这个。数据就很方便,他获取这个历史切片数据就很方便。没毛病吧,啊,所以呢,我们做了一个用户拉链表,它是用来获取历史切片数据,何为叫历史切片呢?切片就说今天站在18号的角度来说,对吧,我们想看一下这个。7月1号,他当天这一天。在这一天情况下,这个用户表里边它全量数据应该是什么样子,这个叫历史切片对吧?啊用户拉链表就于怎么做的,这很简单了,首先做一个初始化嘛,然后把新增级变化数据拿过来对吧?啊1JOIN,而且呢用的是left join对吧,用left join啊那那就是说left join的话,这边数据不要嘛,那你注意啊,其实我们整个的先这张表啊,比如说A,这是B它怎么写的select。
24:25
B表对吧,当然了,添加两个字段啊,添加两个字段,一个开始一个结束,这边呢也添加两个字段。对吧,等下我们先导过来数据啊,那B对吧,然后呢,呃,那个新啊,From b对吧,然后呢,UNUN谁啊,A left join b。记得吧,啊是这样的情况啊,并不是说B表这下面数据就不要了,得要对吧,好照应B是这样的情况,就是这一部分数据呢,正常保留,因为我直接把B表放在这儿了。是这个是这个意思吧,对吧?好,那么这个数据怎么办?那分为join以上跟没装以上的情况,没join以上的直接拿过来呗。
25:03
没装以上的是不是原封不动啊,装以上的呢?装以上的如果你的结束时间为9999,那修改为今天时间网签检疫。对吧,否则也不动。啊,否则也不动,因为防止多次修改嘛,对吧,所以呢,我们除了装医生的还有一个条件,必须你左边的这张表呢,它的结束日期,结束时间为9999杠九九杠九九对吧,必须是这样的一个情况才可以,对吧?这就是过程,这个没什么好说的啊好,这个我们截一下,这是维度建模的准备工作。
我来说两句