00:00
哎,那现在我们看这个2.4啊,这个哎同步策略,诶这个突然就蹦出来一个这个同步策略对不对啊,感显得显得有点突兀,对不对啊,但是这个东西呢,是我们呃去从买SQL当中导数据的时候呢,哎,必须得了解的一个概念啊,同步策略啊,这个所谓的同步策略怎么去理解啊,咱们先策略都知道,咱们先来看这个同步是什么意思啊。这个同步是什么意思啊?哎,什么叫同步啊,是这样啊,其实咱们前面讲过,我们现在的业务数据都在买SQL当中,对吧?都买Q当中,那前面也分析过一个这样的问题,哎,就是说既然数据就在MYSQL当中,那MYSQL呢,也支持SQL查询,那我们为什么不直接在MYSQL里边去写SQL查询数据呢?对吧?咱是不是分析过这样的问题啊,啊,当时咱们考虑两方面因素,一个呢,你在这做大数据量的分析,会影响业务系统。这个是不好,第二一个呢。第二个是什么呀?啊,第二一个呢,就是你买搜当中没有历史数据,对吧,我要想分析一下历历史的状态,你分析不了啊对不对,那所以说我们会呃每天都把买SQL里边的数据呢,诶给它导到哪,导到咱们的have当中啊,导到HTS,导到数仓里啊,那这样一来分析的时候就不再走SQL这个,呃,不再走买SQ的这边了,咱们走的是大数据集群啊,所以说不会影响业务系统啊,而且书仓里边会保留历史数据啊,是这样的啊,那接下来呃,咱们呃在这呢,要呃分析的这个问题是什么呢?就是这个所谓的同步啊就同步好,那既然现在我们要将买SQL里边的数据要给它拿到我们的数仓里边去分析了,对不对,那咱们就得考虑一个问题啊,买搜狗当中的数据是不是每天都有可能发生变化呀?
01:42
什么变化呀,有可能新增,就比如说以用户信息为例,我每天是不是都会有新增用户啊,那老用户呢,我是不是信息可能会修改呀,比如老用户我可能手机号换了啊,我可能我的那个收货地址变了,这信息都是不是都会变啊,那这个一变的话,那那那是不是相当于就是我这个买搜当中数据会有新增和变化产生啊,对不对。
02:05
啊,那既然买S里边变了,那你说数仓里边,咱们这个数据要不要跟着变呢。要啊对吧,啊,因为咱们这个分析你必须得是这边只要你必须得保证什么,这边我的数据什么样的,那你数仓里边数据就得是什么样的啊你要要不然的话,你这边数据这样,那你这边数据不对,那你分析的结果是不是就不对了呀,对不对,所以说哎,那咱们必须得保证我们数仓啊,啊里边的数据得和MYSQL当中数据啊,咱们得得得是同步的才行。啊,那咱们这儿讲的这个所谓的同步策略啊,就是指的就是什么呀?啊就是如何保证啊,咱们买soq当中这个数据发生变化之后啊,我的have数仓里边的数据呢,也能来同步发生变化。啊,这就是所谓的同步策略啊,所谓同步策略啊,好,那接下来咱们看一看这个所谓的同步策略都有哪几个啊。好,来看这数据的同步策略的类型,包括啊,当然后边咱们这个列出来的什么是什么,全量表增量表对不对,这这是这是策略吗。
03:10
这好像不叫策略,这说的是什么表的类型对吧?啊,确实这个有点不恰当啊,咱们这最好给它改一下啊,咱们改成什么呀?哎,叫做全量哎同步啊,那这个叫做什么?叫做增量啊同步啊,那这个叫做什么呀?叫做新增级变化啊同步啊,这是几种同步策略,当然还有一些特殊情况啊,那就是特殊情况就行了啊,那也就是实际上我们这里边儿给大家需要给大家介绍的这个同步策略呢,主要有以上的这三种啊,就是全量同步啊,增量同步啊,然后呢,还有一个叫做新增及变化同步。啊,新增几变化同步啊好,那咱们接下来呢,把这几种同步方式呢,给大家来逐一的说一下啊,逐一说一下,那咱们这儿有这么多的这个同步方式,对不对啊,有这么多同步方式啊,那这么多的同步方式,那我再去使用的时候,我到底应该怎么去选呢?哎,那接下来咱们就一点一点的分析啊,那我在MYSQ当中啊,不同的表,注意是MYSQL里边啊,MYSQL里边不同的表啊,那我所选用的同步策略应该是不同的,那到底什么样的表采用全量,什么样的表采用增量呢?那接下来咱们就来分析一下这个问题。
04:25
啊,假如说我现在买搜狗当中有一张这样的表,什么表呢?这张表有一个这样的特点啊,就这张表我每天只会插入新的数据啊,每天只会新增啊,那原来的数据会不会发生变化呢?是不会发生变化的啊,那这是咱们一种情况,那这样的这个表我采用同步方式,呃,我采用的同步方式应该是哪种呢?就应该是所谓的增量同步。啊,增量同步啊,那增量同步它的意思是什么呢?所以增量同步就是每天只把这张表里边的新增的数据给他同步到我们的数据仓库当中。
05:06
啊,为什么每天只同步新增啊,因为他原来的数据不会发生变化呀,对不对,你每天只把它新增的拿回来就行了啊,这是所谓的增量同步啊,那增量同步的数据啊,我们到了have当中啊,我用一张什么样的表去存储它呢?啊,用增量表去存储啊,也就是增量同步的数据,我最终跑到have里边,是不是就用一张增量表去存储啊。那所谓的增量表是什么样的表呢?给大家介绍一下,增量表一般有这样的特点,首先它得是分区表啊,它会分成很多的区,那按什么分区呢?按天分区,一天一个分区,一天一个分区啊,然后我们是不是每天都是增量同步把那个买SQ当中新增的数据拿到啊,对不对,拿到之后把你拿过来的这一部分就给它放到哪,放到have跟它对应的那张表的,哎,当天的分区当中。啊,放在当区当天分区当中啊,那接下来到了第二天,第二天我这张表是不是还会再新增一部分数据啊,对不对,再新增还是把它第二天新增的拿过来,拿过来之后放到哪儿,放到第二天对应的这个分区里边。
06:14
啊,这就叫做增量同步啊,你看是不是咱们这样同步的话,哎,就能够保证我们数仓里边的数据跟my soql里边的数据是同步的了呀,对不对,这就是所谓的诶增量同步啊,那增量同步在害物数仓里边的表,咱们就管它叫什么表啊,叫做增量表。啊,这个得记住增量表什么特点,首先分区表,每个分区存储的就是当天从买so当中导过来的新增的数据。啊,这个得搞清楚啊,行,这是关于增量同步。啊,关于增量同步啊,然后大家来分析一下啊,增量同步它适用于什么样的表呢?适用于MY4Q当中每天只会发生新增,但是原来的数据不会修改的这样的数据,这样的表,对吧?啊但是这样的表代买CN有没有有啊,但是不全是啊,但是不全是谁是这样的表啊,咱们举个例子,谁是啊用户用户肯定不是啊,用户可能每天有新增,但原来的用户有没有可能修改数据啊。
07:13
有没有可能修改他的一些信息,比如说手机号地址,有没有可能有可能啊,那所以说买那个用户表肯定不是这样的表。那谁是这样的表呢?啊,一般咱们那种流水表,诶都属于这种,这种表就是打流水账的那种表,比如说我们那个支付流水啊,支付流水里边存的就是啥,存的就是你的支付记录,对吧?你支付记录一旦写就会改吗?比如说我付了十块钱,完事又给你改成八块钱了,可能吗?不可能,对不对,那所以说这个是不会变的啊支付流水表我算这种新增表,它就可以采用新增同步啊,这个增量同步,那还有还有一张表,咱们叫什么叫做订单状态流水表对不对,那是不是也是不断的往里写,是不会发生变化的呀,对不对,不会变,那那既然是流水表,那我也可以采用这种增量同步。
08:00
啊是这样的啊好,那咱们先明确这一点啊,那也就是咱分析了啊,增量同步只适用于这种啊,每天只会有新增,不会有修改的这种表啊,但是咱们,嗯,像其他的表,你比如说刚才同学提到了啊,调什么表呢?比如说我有一张这个用户表。对不对,有张用户表啊,那用户表你想一想啊,那我是不是每天有可能有新的用户进行注册啊,那你就相对新增,那原来老用户呢,比如说之前的一个用户,那我修改地址,那是不是他的数据会发生变化呀,对不对,那这样一来,如果说也采用这种增量同步,也就是说每天指导新增的话。啊,那你只要新增你放到我们书仓里边,那你书仓里边的表跟哎买四个里边的表,它能保证同步吗?不能啊,为什么?因为你这边的数据改了,但是你这里边没有体现出来,你还是原来的状态对不对,那这肯定就不行了啊,那这个咱们采用哪种同步呢?啊第二种咱们叫做全量同步。啊,全量同步,全量同步呢,相对来说就比较粗暴,它怎么粗暴呢?啊,因为咱们这个my soq里边既会新增也会变化,对吧,那我怎么办?所以全量同步就是每天都把买SQL当中的这张表,它的什么数据呢。
09:13
全部数据,所有数据啊,导一份啊,全表数据导一份,然后呢,放到我们的数据仓库当中啊,然后采用全量同步的表数仓里边,咱们就管它叫什么表啊。叫做全量表啊,叫做全量表,然后大家要注意啊,这种全量表它有什么样的特点呢?首先它也是分区表,也是分区表啊,也是分区表,那也是一天一个分区,也是一天一个分区。啊,然后他每天的分区里存放的是什么呢。存放的就是你当天从MYSQL当中哎导过来的全部数据。啊,导过来全部数据,那比如说我这个第一天,第一天我会把MYSQL里边的数据全部导一份,然后再放到这个分区里,那到第二天呢,第二天是不是咱们这张表里可能会有新增的数据,也可能会有发生变化的数据啊,对不对,那到第二天我怎么办?我再把全表倒过来,放到我们的数仓里边的第二天的分区里啊,每天都是这样。
10:12
啊,每天都是这样,哎,那有同学有没有样的疑问啊,那你每天是不是只保留一份最新的是不是就行啊,那原来的需要保留吗?需要保留,为什么?因为咱书层有这样的特点,要保留什么,保留历史数据对不对,对不对,所以说你你得保留啊,你得保留啊,但是你这个数据呢,没必要无限制的保留啊,你比如说我这个,呃,这个从开始到一直十年之后,100年之后,我一直留着没用啊,一般情况下只保留我们最近半年或者是最近一年的数据啊,是这样的啊啊咱们历史数据是得保留下来的啊,那这种同步方式呢,咱们就管它叫做全量同步啊,那这样的表,这样的分区表,咱们就管它叫做诶每日全量表啊,就是全量表,好,那这个大家得搞清楚啊。好,那接下来咱们再介绍下一种,下一种叫什么来着,叫做新增级变化对吧?啊新增级变化,呃,那新增级变化适用于什么样的场景呢?大家想一想啊,那刚才我们提到了全量对吧?那全量它很显然啊它呃应该是有一定的局限性的啊,有什么局限性啊,如果说我买SQ当中啊,这张表它的数据量很大。
11:19
而且它也是每天有新增有变化,那如果说我们还是采用这种每日全量的话,那是不是显得有点不太好了呀,因为数量很大啊,完事呢,你每天都要做一个相当于做一个全量的备份,对吧。每天都是一个全量的备份,但实际上这个数据的冗余啊,相对来说就比较大了。而且大家想想啊,你要就以咱们的用户用户表为例,那以用户为例,你说我们每天修改的这种比例或者新增比例会很大吗?可能不会很大,要修改我可能,呃,100万用户可能只有几千用户会修改,对吧?啊,可能这个比例很小,但是我那些没变的数据,我是不是也每天都要倒一份啊,对不对,这个相当于这个效率有点太低了啊,这个代价有点高啊,冗余有点太大了,那这种方式如果说这个表的数据量很大啊,完他的修改频率呢,也没有那么高,那所以说这时候我们就最好不要采用这种全量同步,最好不要采用,那不采用全量同步,那咱们采用哪种呢?那增量行吗?
12:20
增量不行,增量分析过了,你这个变化数据是不是同步不了啊,那就不行了,那怎么办?哎,接下来就需要引入咱们这个第二第三种同步策略,叫做新增及变化同步。所谓新增级变化是怎么做呢?诶,首先这张表哎我放在这儿了,每天有新增,每天也有修改,那我所谓的新增级变化就是啥?那就是每天只把它修改的那部分数据拿过来,然后呢,哎,再把它新增的那部分数据拿过来,对于那些没变的数据咱们拿吗?不难,因为你没变没变,我收藏里边之前就已经有了,对吧,所以说我就没有必要再重复的啊,每天只精确的去获取它新增和他修改的那部分数据,而呢,把这部分数据咱们给它导到我们的数据仓库当中啊,倒过来。
13:09
啊,那这样的数据新增及变化的数据我们导到数仓里边之后,哎,我怎么去存储这个数据呢?那它就不能简单的以一个分区表去存储了,你看我们前面增量全量啊,那我们直接用分区表把那个当天数据存到里边是不是就行了啊,那这个也是没问题的,但这种新增及变化呀,对咱们就嗯不太好放了。啊,不太好放了啊,这个好不好放,应该从哪个角度去考虑呢?啊,得从咱们去使用这个数据去考虑。啊得从去使用这个数据考虑啊,咱们呃一个一个对比,那咱们先说这种增量表,增表首先在买思当中,在在看当中,咱们增表是不是是不是分区表啊,对不对,分区,然后每天呢,存放我这个当天新增的数据。那假如说我现在呢,想获取一下某一天啊,咱们这个新增的数据,那是不是直接找对应那天分区就行了呀,我要想获取全部的数据呢。
14:05
那就是全表。对不对,没问题吧,啊,那如果是如果是那种全量表呢。全量表,全量表咱们是每天一个分区,每天一个分区对不对啊,然后呢,每天都是当天的全量数据啊,那假如说我想获取最新的啊,那数据你怎么办?是不是最后一个分区,我想获取历史上某一个状态,怎么获取,从对应那一天的分区率找是不是就行了呀,对不对?那假如说咱们现在是新增级变化,新增级变化你去使用的时候,是不是也就是这样的一些使用方式啊,比如说获取全量的这个最新的啊,或者获取历史上某一天的这个最新状态,呃,某某某一个历史上,呃,历史上某一天的这个全量数据啊,是不是就是这两种啊,一种就是获取最新的,一种是获取历史上某一天的,对不对?那你说对于新登级变化,咱们怎么去获取这个最新的全量,怎么去获取历史上某一天的全量呢?
15:00
因为新增级变化,你每天倒过来就是什么,当天的新增的数据和发生变化的数据啊,这个也是新增的变化的,新增的变化的,新增的变化的,新增变化是不是这样,那你说从这样的一张表里,你给我找出来全量的最新。啊,就是找,比如说如果是用户表的话,那就相当于找到所有用户的最新状态,对不对,那你怎么找。好像就不好找了啊,你要是全量同步呢,直接拿最新分区一下就拿到了,对吧?啊,但是这个也好像就不好拿了。啊,就是让你找历史上某一天的呢,好像也不好也不好找。对不对,也不好找,那所以说那这个新增级变化,虽然咱们数据量导的时候能少一点对吧,但是这个导到书仓里边啊,我这个数据就不太好用了啊,就不太好用了啊,那所以说我们后续会给大家讲一下,就是对于这种新增及变化的这个数据,我们到底如何去存储。啊,后边呢,我们讲到数仓的时候,才会给大家讲这个这个地方啊,啊后边才咱们才会讲,那现在呢,呃,我们就先了解到这个新增级变化,同步这个策略就够了啊,至于这个表这个数据到了收藏里边,我到底怎么去存储的这个数据,咱们后续再说,后续再说。
16:13
行,那也就是咱们现在呢,就讲完了这样的三种同步策略了啊,那接下来咱们打开文档啊,看到文档呢,咱们去总结一下这三种同步策略啊,首先先看这个哎,全量同步策略啊,全量同步策略啊,全量同步策略呢,我们呃所做的事就是啥,就是每天啊干什么呀,把买思当成一张表,它的全部数据是不是导到书仓里边,相当于每天做一个备份,每天做一个快照,对吧,实际上就这样的一个作用啊好,那它剩余的场景是什么呢?看这。啊,适用于表的数据量不大,且每天既会有新数据的插入,又会有旧数据的修改的这样的场景啊,这是全量,那接着往下,下边是增量同步啊增量同步,那增量同步我们是用这个他怎么做的呀,相当于每天把买SQ当中把新增的那部分导过来对吧?然后放到咱们增量表当天的分区里,是不是这样去做的呀?那它适于什么场景,看一下,那它适用于每天只会有新数据插入的场景。
17:14
啊,那他这个数据,这个的数据量大不大,对它有影响吗?那其实没有什么影响,我的数据,我这个表数据量可以很大,你很大就很大,但是我不是说每天都有全表,我只找新增的那一部分,对吧?啊,那所以说你这个数据量大我也能适用啊,是这样的啊,所以说是增量同步,哎,它适用的场景就是只适用于哪种哪种啊,就是这个表它每天只会有新增,不会有修改啊好,这是增量,那接下来看最后一个就是新增及变化啊,新增级变化,那新增级变化适用的场景是什么呢?哎,就是表的数据量大。然后呢,既会有新增又会有变化啊是这样的啊好,那这是咱们这三种同步策略啊行,那这三种典型的同步策略说完之后呢,那接下来咱们还有一种特殊的情况,就是这个特殊情况对吧?那特殊情况指的是什么呢?
18:05
啊,大家来分析一下啊,你不管我们采用的是全量同步还是增量同步,还是什么,还是这个新增级变化同步啊,甭管是哪种,他们都有一个共同的特点,什么特点呀?啊,就是他每天都会去从买词汇里边同步数据。对不对,甭管是增量全量还是这个新增级变化,是不是每天都要导一部分数据过来啊,对不对,这是他们的共同特点,然后咱们这个所谓的特殊是什么呀,特殊有一些呢?诶我可能有些数据我没必要每天都去同步。比如说什么样的数据呢?咱们举个例子,比如说我们那个啊地区表啊,地区或者是省份表,那你说这两张表里的数据每天都会发生变化,或者是每天都会新增吗?不会吧,你这个省不能说一天增加一个省啊,或者一天修改一个省,这不可能对吧?我们这个省或者是地区很长一段时间对不对,他是不是都可能它都都不会发生变化呀,对不对?所以对于这样的特殊数据,咱们没有必要每天都去导,我们只需要怎么办就行。
19:05
保一次就行啊,在书仓里边呢,就保留一份对不对,那万一真的发生变化了,比如说可能我某个省份啊,呃,我这个比如说我换那个,呃换省灰了,有没有这有可能对吧?那你要换了的话,那我是不是把那个呃换了那条数据咱们重新修改一下就行了,没必要每天都倒啊,是这样的啊,所以说我们是存在一些这种特殊的情况的啊,那特殊情况都有什么,来看一下。啊,第一第一个啊,没变化的客观世界维度信息啊,就比如说刚才咱们举到的,比如说这个省份地区啊,什么性别,民族,政成份,鞋字尺码等等等这些东西呢,我是很长一段时间是基本不会发生变化的,那这种数据我们就可以只存一份就行了啊只存一份的,你像下边这是不是还有一个什么地区维度啊,这个地区维度其实就属于什么。就属于这个所谓的客观世界维度对吧,那所以这个呢,其实就不用再单独拿开拿出来了,把它删掉就行啊好,那咱们接着往下走,这块呢,还有一个啥,还有一个这个所谓的日期维度啊,日期维度呢,它其实也相对来说比较特殊啊,也比较特殊啊,这个日期维度是什么,给大家解释一下啊,是这样的啊,大家想一想。
20:16
我们前面一再给大家强调,一再强调就是我们数据仓库里边需要保留历史数据,对吧,那保留历史数据的目的是什么。目的是什么呀?目的是不是就是咱们可以多一个相当于多一个这个分析问题的角度啊,什么角度就是这个时间角度啊,就是时间角度啊,就是我可以哎参照这个时间啊,去观察这个数据的这个变化情况啊,可以根据这个呃,这个咱们历史数据去,呃,找到这个数据跟时间的一个变化规律啊,这是咱们保留历史数据的目的啊,那所以说我们既然有了这个时间维度了,那我们对应的呢,到后期就会在数据仓库里边呢,咱们会建一个时间维度表。啊,我知道大家现在肯定对这个时间维度这个东西呢,没有任何的概念对吧?啊,这个没关系啊,但是大家现在就知道啊,我们后期会在数仓里边呢,会建一个表,这个表呢叫做诶时间维度表啊,当然我们也会建什么地区维度表,用户维度表等等等,这都是我们数仓里边那个维度建模里边的概念了啊,这个得在后边才能讲到啊,所以这个大家现在不用着急啊,这样大家知道我们得建一个时间维度表就行了,时间维度表它有什么样的特点呢?哎,时间维度表就是用来描述时间的,对不对?诶好像这个什么叫描述时间,时间有什么可描述的呀?哎,其实大家可以跟我一起看一看啊,所谓的时间维度表长什么样?首先哎,我里边得有一个主见,然我的主见就是什么呢?主见就是咱们的日期啊,就日期2020,哎0916 20200917,哎,这就是它的主见,然后后边有什么字段呢?啊,字段就是比如说这一天啊,你是这一年里边的第几天。
21:52
啊,你位于这一年里边的第几个季度啊,就第一季度,第二季度,第三季度啊,那你今天是周几啊,你今天是不是这个法定的节日啊,等等等等是这样,这就是咱们对日期的一些描述信息,这些东西呢,哎,能够非常方便我们去做一些跟时间相关的统计啊,比如说我想统计一下这个第几个季度的这个什么什么数据,哎,你就会用到这个时间维度表啊,就说我们会需要一个这样的维度表。
22:20
啊,哎,大家想一想,你说这样的一个维度表里边的数据,咱们需要从MYSQL里边去一天一天的导吗?不用为什么,你像这样的数据啊,我们是不是可以提前预知啊,对不对啊,比如说这个,呃,我咱们这首先有日历对吧?啊,日历我一定可以看到后边好多年的呀,对不对,所以说你像这种东西,咱们没必要一天一天的去导,我可以怎么样啊,我可以一次性的导入,呃,一年或者是若干年的数据。啊,当然呢,你对于那种什么法定节假日这个东西,你可能没有办法一次性导入若干年,为什么?因为咱们国家的法定节假日是什么,是什么时候啊,是每年的,它就是比如说这个呃一九年呃,法定节假日是不是在一八年结尾的时候给你公布啊,对不对,那你下一年都有那个哪些节假日啊,你是不是得拿到那个东西时候,你才能去获取这个节假日相关的信息啊,啊,所以说没必要没没有办法一次性倒若干年,但是倒一年的肯定是没问题的。
23:17
啊,是这样的啊,这是咱们关于日期维度的数据,就是没必要一天一天导,我们可以一次性的导入一年或若干年的数据啊,这是两种特殊情况啊,对于特殊情况呢,我们就没有必要遵循上述的同步策略了,特殊情况特殊处理就行了啊,那怎么处理这个后续咱们出仓里边会给大家讲的啊,啊这是咱们这个特殊维度,好,那我现在把视频录一下。
我来说两句