00:00
啊,那咱们接下来要讲的呢,是事实表的分类,事实表的分类啊,时表分类,那实时表分类呢,我们分为以下三类啊,事物型周期型快照,还有累积型快照啊来咱们一个一看,先看第一种啊事物型事时表,其实这个事物型时表呢,它是我们这个最典型的事实表。最典型的试纸表,而且呢,也是我们书仓里边就是相对相对比较常见的实值表叭,较常见的试值表啊好,那接下来我们看一下这种实时表它有什么特点啊。看一下。事务型实表当中啊,它就是以每个事物或者是业务事件为单位的。啊,那这个怎么理解,这个你看跟我们那个事实表的这个普通的定义是不是就是相同的呀?啊,事实表当中每行数据代表一个业务事件,那我这种事物性时表当中每行数据以什么为单位,是不是就以业务事件为单位啊,那说白了,他俩其实定义是一样的啊,一行数据就是一个具体的业务事件啊,然后呢,那这种表啊,它有什么样的特点啊,什么特点?哎,看一下啊,就是事实表当中的数据啊,哎,被插入进来之后呢,数据就不会再进行修改了。
01:15
啊,这就是我们这种事物型事时表的特点啊,事物型事时表特点啊,就是我这个,比如说这是我数仓里边啊,数仓里边我这儿呢有一个哎,15星实时表啊,然后呢,我这个15星实时表里的这个,因为15星实时表它所呃重新重新往这边画一点吧。啊,比如说这个呢,是我数据仓库当中的一个事务形时表啊,数形数据表,那事务形式表呢,它在我们的关系型数据库当中,在我们的业务系统当中,那它是不是肯定对应于一个具体的一个事务,呃,对,对应一个具体的业务啊,对吧?那咱们说了,呃,一个业务对应一个实时表啊,那是这样的啊然后呢,我们这种事务型事实表,它在买S当中所对应的那个业务表有什么样的特点呢?有什么特点啊。
02:03
啊,就是在买SQL当中啊,这张业务表它是不会发生变化,它的数据不会变,每天只会新增啊,只会新增不会修改啊,不会修改啊,它有一个这样的对应关系啊,那咱们回忆一下啊,我们前面给大家讲了,我们的业务系统当中好几个业务对吧,那哪个业务咱们那个数据是不会变的呀。大家能想到的。支付流水表。支付对不对,咱们支付这个业务,咱们前面讲了,是不是在买so当中,咱们那个payment in那张表是不是数据只会插入它是不是不会修改啊,对不对,那这个支付业务,支付业务,那我就可以给他做一个什么样的试表啊。是不是就是一个事务性实时表了,对不对啊,就是这样的啊,咱们得这么去理解啊,也就是说你这个业务啊,因为咱们都知道一个业务我要有一个呃,实时表跟它对应对不对,那你这个业务它所对应的实时表到底是哪一种,到底是哎事务型的还是什么?周期型的,还是累计型的,那这个是由谁决定的呀?
03:08
是不是由这个业务在买circleql当中的那张表的特点决定的呀,对不对,如果说在MYSQL当中,我那张表啊,我这个数据每天只会新增,那OK,我就可以建一个事物型实时表啊,能理解吧?啊是这样的啊啊,那咱们把这一点也明确,那接下来咱们看第二种,第二种呢是周期型快照实时表。那周期型快照师表它有什么样的特点啊?我们来看一下周期型快照时表当中它不保留所有数据。只保留固定时间间隔的数据,哎,这个咱怎么理解啊,什么叫做不保留所有数据,只保留固定时间间隔的数据啊?首先咱们先看前半句吧,不保留所有数据这个是跟谁做对比的呀?谁保留所有数据了呀?对,其实前面那种事物型师表,我其实我保留了所有数据。
04:01
对不对,因为什么?因为这种表里边一行数据,它指代的是什么?是一个具体的业务事件,对不对,那业务事件是不是就已经是最原始的数据了呀?啊,一个操作一个业务时间,一个操作一个业务时间,那已经是最明细最原始的数据了,所以它实际上是保留了所有的数据,但是这个呢,它并没有保留所有的数据,只保留固定时间间隔的数据啊,那这个怎么理解啊,咱们举个例子啊,比如说这儿有一个小例子。咱这儿呢,以加入购物车这个业务为例啊,以加购物车为例啊,大家想想啊,对于加购物车来说,你说我这个最原始的这个最明细的操作应该是什么呀。是不是加购物车减购物车,加购物车减物是不是这是咱们最明晰的操作呀,对不对,那按理来说,咱们如果说对加购物车咱们也做一个事务性实时表,那你是是不是一行数据就应该是一个加购或者是一个减购物车的一个操作呀,对不对,但是大家想一想,这个实际上对于购物车这个事实这个业务来说啊,咱们有必要去呃保留这些具体的加减操作吗?
05:02
啊,其实更多的咱们没有必要,为什么呀,因为对于购物车这个事儿来说啊,你说你关心的应该是啥。你关心的应该不是这一天里边啊,我这个用户到底加了多少次购物车,加多多少次购物车,其实这个并不是咱们最关心的东西,咱们最关心应该是什么呀,最关心的应该是每个用户的购物车当中啊,这一天结束了啊,看一看每个用户的购物车车当中到底都有什么商品。对不对啊,为什么呀,因为比如说我我发现经过我们的统计,我发现啊,啊,很多用户的购物车当中都有某个商品,那说明什么,说明这个商品啊,我现在可能很多很多人都需要它,但是可能这个现在这个价格还不是那么美丽,对吧?啊,我我可能我可以促销一下,对不对啊是这样的,呃,这就是啊,咱们这个对于购物车这个事儿,哎,我们所关心的东西,我们关心的并不是具体的价钱操作,我们关心的是用户他的购物车当中到底有什么商品啊,或者是最终有几件,那么所以说对于加购车这个业务来说,我们就没有必要去做这种事务性时表啊,我们做一个什么呢?做一个周期型快照时表,只保留固定时间间隔的数据,那这个怎么做呀,那咱们这这个所谓的周期是不是就是固定时间间隔呀,那咱们这个离线数仓里边,咱们周期一般就是以天为周期嘛,啊,那也就是说我需要怎么做,需要把关系型数据库,也就是买S当中,哎购物车那张表啊,它里边的数据咱怎么做呀。
06:27
在周期的做快照啊,就是每天一个快照,每天一快照,每天一快照,每天一快照。那这就是什么表呢?就相当于是。是不是有点像咱们那个全量表。对不对,全量全量同步是不是就是每天把买所有当中的数据,我怎么做呀,我是不是把它这张表的全部数据拿到书仓里边做一个快照,一天一快照,一天一快照对不对?那其实说白了,周期型快照实时表,那就是全量表啊,就是全量表啊啊那这个咱们搞清楚就行了啊行,那接下来咱们再往下看啊看最后一个,最后一个呢,是累积型快照时表,那这个呢,我们重点理解这个累积啊,这里累积它为什么叫累积型呢?来看一下,先看一下累积型快照时表,它适用于什么样的场景,适用什么样的业务啊来累积型快照实时表呢,它哎更多的情况下是用于追踪啊这种业务事实的变化。
07:21
啊,那它适用什么样的业务呢?适用于那种会周期性变化的业务啊,周期性变化的业务,咱们这举一个非常典型的例子,就是下单啊,大家想一想啊,这个在买soql当中,我的订单表里边,比如说一行数据就是一个订单,对吧?那订单里边是不是有一个订单状态order statuss对不对,那订单状态那个字段是不是会周期性的变化,是不是会周期性变化呀?啊什么时候变化,比如说哎,这个最开始是未支付,然后变成什么已支付,已发货,已完成,是不是有这样的一个固定的周期呀,对不对,那这就是周期性的业务,那周期性的业务呢,我一般情况下就会使用这种累计型快照时时表啊,去干什么呀,来去给它进行这个呃保存啊,进行保存啊好,那接下来咱们来理解一下这个累积型,呃,快照时表里边这个累积怎么去理解啊,咱们理解一下。
08:12
看一下下边这张表,这样呢,我就给大家画了一个这种,呃,比较典型的一个累型快张师表,比较典型的一个累积型快张师表,那这个累计快张师表啊,从字段上来看啊,它具备以下这样的特点啊,什么特点?啊,它会有很多的时间。啊,你除了时间,你看啊,是不是也是什么维度的外键,以及那个度量值啊,啊,这就是我们普通时表应该有的字段,那除了这些呢,它还有一大堆的时间,然后这个每个时间它对应的是什么呢。啊,对应的是这个业务啊,这因为它是一个周期性的业务,对不对,那周期业务里边是不是有固定的阶段呀,对不对,每个时间对应的都是这个业务周期当中的一个阶段。啊,一个阶段啊,这块呢,有一个术语啊,叫做什么呀,叫做里程碑啊,每个时间都是一个里程碑啊,就相当于就是咱们这个业务当中这个周期业务里边的一个一个的阶段嘛,对不对,这儿就是相当于有下单时间,有支付时间,打包时间,发货时间,签收时间,这就是我们下单啊,这个业务当中固定的一个诶周期啊,固定一个周期啊,是这样的啊,然后来我们分析分析啊,那这样的实时表啊,你说你往里边导数据的时候,它是怎么导的啊。
09:28
因为咱们是离线数仓,是不是一天一天的倒啊,对不对,比如说第一天的时候,我们,呃这个在用户啊,在买sol当中,哎,比如说我下了一个单,但是我只下单了,我并没有进行支付啊,那这时候你是不是呃,每天往咱们这个呃数据库往咱们数仓里边去同步这个变化数据的时候,这个时候属于一个新增数据啊,新增数据咱们肯定要拿过来,对不对,那拿回来之后,OK,我会往这张表里是不是插入一条数据,会插入一条数据吧?啊插入OK,你的订单ID是什么UID是什么,订单金额是多少,OK,没问题,然后呢,这几个时间怎么处理啊,因为我只下单了,是不是只有一个下单时间。
10:03
对,后边我是不是还没有支付没有发货,那是不是后边全全是闹啊对不对,那OK,到了第二天,那第二天的时候呢,我发现这个哎,同一个订单我怎么样了呀,我支付了,我也打包了,但是还没有发货,那这时候我会怎么做,是不是会在数据仓库当中啊,注意是在数仓里边,我是不是得先找到这个订单对不对,找到它之后,然后呢,对,把打包时间跟那个支付时间是不是改成咱们数,呃,关心数据库里边那个时间呀,对不对,改上,然后后边发货签收是不是还没有那么OK,到了第二天我再去导数据的时候呢,我发现这个订单最终已经这个发货了,那这时候是不是咱们把这个变动数据得拿过来,然后呢去更新发货时间啊,然后再过几天,最终这个呃,经过物流嘛,数据这个呃,商品到了咱们的这个呃客户手里了,那OK,最终签收了,签收之后是不是得把这个签收时间再更新呀,对不对,那这时候是不是这条数据才算写完了啊,你看这条数据他是怎么写的呀,他不是一次性的。
11:04
写完的他怎么写的呀,是多次分多次是不是累积写入的呀,所以说这种表呢,咱们管它叫做累积型啊快照实时表累积性的啊,那用于追踪业务变化,那你看他是怎么追踪的呀,是不是就是根据这几个时间追踪的呀,对不对,那看到这条数据,我就知道这个订单他是什么时候下单,什么时候打包,什么时候发货,什么时候签收啊,就这么追踪的啊啊这就是累积型快照十秒。啊,然后呢,大家要这个再多思考一下啊,多思考一些啊,就是这些实施表啊。这是咱们从事实表的这个分类,咱们这么去分对不对,那这时候我们其实啊,可以换一个角度去看一下这几种事实表,咱们换换换到什么角度呢?换到我们这个数据的同步策略上啊,从数据同步策略来去看一下这几种实时表。啊,他们之间并不冲突啊,并不冲突,这是不是相当是两个不同的角度啊,对吧,并不冲突啊,那我们刚才从时表的角度啊去分析有这三种,那接下来咱们把这三种表跟我们的同步策略去做一个对应啊,那你说这种实时表,那它应该是哪哪种同步策略呀。
12:17
应该是哪种啊,增量同步,因为他要什么时候才能使用,才能做这种事务性实表啊,得是买搜Q当中那个业务表对吧?它得是什么呀?每天只会新增不会变化,我才能做数物性时表对不对?那只会新增不会变化的表,我一般采用哪种同步方式啊,新增增量同步对不对?那增量同步的表啊,其实咱们到了数仓里边就管它叫啥表啊。啊,增量同步表咱们就叫增量表啊,就是从数据同步这个角度去看啊,增量同步的表就叫增量表啊,那增量表长什么样,还记得吗?增长长什么样?还记得吗?分区表。这里面是不是有分区表,那分区表里边每个分区保存的就是什么,当天新增的数据。
13:01
是不是这样的呀,那所以说我们的事务型实时表,它就长这样,事表就是分区表啊,然后呢,每天的分区里边就存储了当天新增的这些业务事件。啊,比如说以以支付为例啊,以支付为例,那支付的业务这个实时表里边,那我里边每天的分区里就存了什么,是不是就存了当天的支付记录啊,啊是不是就这个意思啊,就是它啊,啊这是啊事务性时表,那接下来看这种周期型快照时表,那这种表它所对应的同步策略应该是哪种啊。全量同步啊,就是全量同步啊,全量同步啊,因为相当于每天做一个快照嘛,所以他长啥样,是不是也是分区表啊,也是分区,然后他的每天的分区里存的是什么数据啊啊就是哎买搜狗当中啊,这张表的全部数据,一天一快照,一天一快照,OK,那这时候咱们回忆一下,之前我们在讲那个采集项目的时候啊,咱们前面讲了,讲到那个加购物车那张表和那个收藏那张表的时候,咱们哎这么去咱们是这么去分析的,咱们还记得那两张表咱们采用的什么同步策略吗?
14:02
咱们采用的是全量,当初呢,咱们给它标了一个特殊,它为什么特殊呢?其实按照理论上来分析啊,咱们这种加购物车和这个呃收藏,你说这两张表它的数据量大不大呀。大不大,那肯定大呀,对吧,因为它里边存的是业务事件呀,对吧,那业务事件每天都会增长,所以它肯定大,那理论上来说,这张表咱们不应该采用全量同步,咱们应该采用新增疾变啊,对不对啊,理论上应该不采用全量啊,那但是呢,咱们因为出于到这种考虑,因为我们在这要做的是什么?是周期快照师表,对不对啊,那每天做一个快照,每天做一个快照,那咱们是不是正好采用全量是比较合适的呀。对不对,那所以说当时比较特殊啊,即便它数据量比较大,我们也采用了全量啊,就是这个原因啊好,那接下来咱们看最后一个啊,累积型快照时值表。那你说累积型快照时表啊,咱们这儿应该采用哪种同步策略?对,因为没得选了,只剩一个新增级变化了,对吧?啊,那这边确实咱们所采用的就是新增及变化同步。
15:05
啊,新增级变化同步,然后新增级变化同步啊,大家后期我们去实现起来的话呢,你会发现啊,新增及变化同步啊这种策略啊,咱们使用起来要比这个呃全量和增量啊要麻烦一点。啊,要麻烦一点啊呃,为什么麻烦呢?啊,为什么麻烦呢。咱们要要搞清楚啊,你说这个所谓的这个同步,咱们是在干什么,是不是在把关系型数据库的那个变化同步到收藏里边来啊,对不对,那当然同过来之后你看啊新增,那我把这个新增拿过来,是不是整张表是不是就和咱们关系数据库里边是一样的了呀,是不是同步了,对不对,那对于这种全量的呢。是不是最新一天的分区就跟咱们的关型数据库里边是一样的呀,对不对,因为咱们是全量嘛,啊,这是不是就是相当于这个就同步过来的这个变化,那对于这种新增及变化,它可能就没有那么容易了,为什么?因为你想一想,你每天从数据库里边导过来的是什么,只有新增和变化的那一部分对不对,那你得干啥?是不是得拿着新增级变化的这部分数据和你昨天搞过来的那部分没变的数据得做一个什么呀?
16:13
是不是得做一个整合呀,对不对,也就是咱们这种新增及变化同步呢,我们这个表要想用,你还得给他做一步整合,这部整合呢,其实相对来说是比较麻烦的,比较繁琐啊,比较繁琐啊啊那这个到底这个怎么去做这步整合呢?咱们现在不着急,等后续咱们去呃写所有的时候,咱们再去分析这个到底这个所谓的整合是怎么去做的啊啊这就是咱们这个三种实施表,这三种实施表呢,咱们呃要求大家掌握每一种实施表它的特点啊,这个是第一点,那第二点呢,咱们得把这个实时表啊,这三种实时表啊,跟咱们那个同步策略啊,需要做一个对应,咱们自己得关联起来啊,把这个知识点呢串起来啊好,那这三种师表的类型,哎,咱们就说完了啊好,我把视频录一下。
我来说两句