00:00
拉链表的制作过程,在文档上给我们列出来的几个步骤啊,步骤零,初始化拉链表,这个已经标注了,是首次单独执行就行,对吧?那后边往下走,那呃,步骤一,那获取每天的变动数据,那再往下,呃,这个是合并,呃变动信息啊,就是把这个新的数据和老的数据进行合并呗,当然他这还是有临时表的,是不是先放到临时表啊,放临时表再怎么办?再把这个临时表当中的数据是不是再放回到真正拉链表啊,那刚才咱们其实也说了,是不是没必要加这个临时表啊,啊,其实没必要加啊,那文档上也有,咱们也不改了,要改的话,咱们要改东西太多了啊,咱们就呃这么做就行,这个也其实也费不了多长时间啊,来,咱们把这个步骤呢,先给它粘出来吧,那咱们照这个步骤去做一下啊。来,CTRLV,这是第一步,初始化拉链聊,来,咱们接着往下走。第二步来制作当日变动。
01:00
CTRLV。哎,刚刚。刚刚。刚刚啊来咱们下一步下步呢是合并变动信息啊。哎呀,点错了,能放在这儿。好,下一个最后一步啊,最后一步呢,是把这个临时表的数据放到真正的拉链表里。来,把这个拿过来。放在这里啊,大家应该都看到了啊,来,我们接着走。可以,我能把它打开了。来,咱们接着走啊,那这四个步骤是不是列在这儿了呀,那列在这儿呢,我们就呃照着这个步骤呢,咱们就去做一下啊,那现在呢,我们先做第一步就是这个所谓的初始化拉链表啊来,我们现在把这个先把拉链表这个界面语句先拿过来吧,咱们看看它长什么样子啊,拉链表长什么样。其实没什么新奇的,CTRLC打回来。CTRL位,其实这个拉链表呢,就跟我们MYSO当中啊,或者跟咱们ods层的那个用户表里边的字段是一样的,只不过就在它那个原有字段基础上,是不是再加俩字段呀,一个是开始,一个是结束啊,一个结束,然后呢,大家注意观察一下啊,咱们这个拉链表咱这儿分区了吗?
02:14
分分没分居。没有分区啊,它没有分区啊,那为什么这个拉链表在这儿咱们没有分区啊。为什么没有分,你看咱们企业边所有边是不是都分区了,就他没分区,嗯,他为什么不分区。是因为它数据量少吗?它不少,因为维度表,咱们之所以做拉链表,是不因为数据量大才做拉链表啊,它肯定数据量它它不小。为什么呀,为什么没有做拉,没有做分区啊。其实你得考虑一个问题啊,就是咱们得知道我们分区的主要目的是什么,我建一张表,我为啥要分区啊。其实主要目的就是因为如果说我这张表啊,我分区了,那然后你从这张表查数据的时候呢?哎,如果你以分区字段作为过滤条件,是不是那个过滤的效率是最高的呀,你不用全面扫描,是不是咱们分区的一个主要目的呀,对不对?那前面咱们之所以都按天分区,是因为我们整个这个数仓,我们是离线计算嘛,一天算一天的,那我按天分区是不是正合适啊,对吧?啊,但是这个拉链表,你想想拉链表咱们去使用它的时候,过滤条件一般情况下应该是什么呀?啊开始日期啊,什么大于,就是你那个某一,呃,开始日期小于等于某一个日期,并且结束日期大于等于某一个日期,对不对?你说这样的管理条件你咋分区啊?
03:36
没有办法分区。对不对啊啊,其实是基于什么呀,基于咱们这个,呃,这个拉链表的一个特点啊,由它导致的,咱们这个没有办法分区,其实你要真想分区的话也能分。啊,怎么分呢?咱们往另外一个角度考虑啊,那刚才咱们提到的说使用它的时候,过滤条件应该是啊,开始日期小于等于某个日期,然后呢,结束日期大于等于某个日期,对吧?这这是获取什么,这是获取历史上某一天的数据,咱是这么过滤,那我如果说获取什么呀,获取最新数据,那应该是什么呀。
04:08
是不是N等于999啊,对不对,那呃,其实我们更多的时候使用这个拉链表,我们可能获取最新数据要更多一些,对不对,因为咱们每天去重复计算的时候,是不是都是拿最新一天的数据啊,对不对啊,因为离线计算,每线计算线一天啊,每天都是最新一天,每天最其实获取最新一天这个场景要更多一些。啊,那所以说基于这一点考虑,那这张表咱们要非要分区的话,你可以分几个区啊。对,就分俩区啊,一个区域里边存什么数据?存n date等于9999的数据,另外一个区咱们存啥。存剩余的所有数据。能理解吧,那相当于这个9999这个分区,就是咱们的什么数据啊。最新数据啊,那它就是咱们的热点数据,相当于因为我这时候读它读的更多一些啊,你要硬要分,那这个拉链表就这么分就行啊,就这么分就行啊,当然在这呢,它没有分,没分咱们就就先不分了吧,啊先不分了啊啊,那这个建表语句咱们就介绍完了啊,那介绍完之后呢,咱们开始做我们的第一步就是所谓的初始化拉链表。
05:13
好,问一下啊,初始化拉链表,咱们在生产环境下应该怎么做?啊,怎么做这个初始化。怎么做呀?啊,是不是应该是使用。呃,使用这个数据库同步工具。啊,这个工具很多对吧,咱们用scoop或者用谁啊,或者用SCO,或者用那个带叉是不是都行啊,对吧,咱们之前讲过,那在这儿咱们用scoop呗,对不对,那使用scoop怎么做呀。啊。怎么做哎,单独执行哎一次啊这个哎数据的说叫做同步同步任务吧,单独执行一次同步任务。啊。
06:00
这个任务呢,我们需要实现什么样的功能啊,哎,将将什么将业务系统啊系统。中的啊,这个咱们这是什么表,是不是用户表啊,那咱们就用户表。用户表的什么全部数据?啊,一次性的。导入到这个拉链表里。来啊你。有中。这是我们生产方向,咱们应该做的,对不对啊,然后呢,你看一下咱们文档是怎么做的啊,文档这呢,这个没这么做啊,文档怎么做的。我等会出手拉的表直接怎么错的,你看一下。是不是他是从咱们这个ods层的user in for当中,把6月14号这个分区的数据查出来,然后呢,放到咱们这个拉链表里边来呀。啊,他为什么这么做啊,呃,这是因为呢,咱们现在呃这个教学环境呢,呃,因为咱们这个呃买soq当中,咱是不是只有一天数据啊,现在就一天6月14号的啊,这个6月14号的是不是全部都是6月14号的新增数据啊,啊都是新增,那所以说咱们往ods层user引这张表导出去的时候,咱们导的是什么,是新增级变化对不对?那所以说现在ods层user info这张表里边儿,6月14号的分区里边。
07:27
他的数据是不是就是我们买词Q当中的全部数据啊啊,那所以咱这儿呢,呃,就没有去那个写词库脚本,那咱们直接哎就从这儿导了一下,那这边呢,咱们就按照这个来吧,啊,咱们就不再去单独写一个S库,但是大家得知道啊,在生产环境下呢,咱们需要单独的去买四克龙倒一次,这个一定得记住啊,咱们这是因为这个相当于偷了个懒啊,但是你工作的时候不能偷懒啊,那生长环境这个是教学啊,咱们教学。这个school脚本应该大家写起来没问题啊,那个很简单啊,那教学环境啊,咱们这拖懒啊,CTRL位,那我们就是这么做的。
08:03
OK,那这个初始化导入呢,是不是把这做了之后,咱们相当于就完成了呀,这个初始化导入就完成了啊,那接下来呢,我们是制作这个变动数据啊,当时变动数据,那这个所谓的变动数据,这应该咱们是不是都不用做呀。对,咱们使用死库啊,每天去导那个用户表,咱们导的是不是就是新增级修改的数据,就是所谓的变动数据,对不对,所以说这个新增级变化据咱们现在在哪放着,就在我们ods层的user info当中放着。对不对。没错吧,啊,然后大家这块得搞清楚啊,那刚才咱们已经做了初始化了,初始化咱们是不是导了14号的数据了呀,对不对,那14号你做了数法导入之后,你还用导什么14的新能级变化吗。没了,因为你第一天是不是已经做了初始化导入了呀,对不对,你这个获取新增级变化应该从哪天开始获取啊。是不是应该是从第二天开始,那也就是咱们这儿应该时间来到哪一天才获取新能级变化呀,是不是应该来到了这个6月15号的时候啊,诶对吧,那个诶2020杠零六杠诶幺五啊,那咱们去获取这个一天的这个啊,就是咱们第一次去获取这个新增级变化,然后以后从6月15号开始呢,每天都是获取新增变化了啊好,那这个6月15号的新增级变化的数据呢,就在这张表15号的分区里边,那咱们这个有15号的数据的吗?还没有的啊,没有的啊行,咱们先知道怎么回事就可以啊好,那咱们这是怎么获取这个变动数据的呀,咱们是根据我们买搜索当中这个表的两个字段去获取的,对吧?一个字段是create time,它是不是获取新增,还有一个字段叫做oper time,它获取的是啥呀?是变动数据,一个新增一个变动。
09:51
对不对啊,那咱们这儿呢,非常幸运啊,我们的买搜狗当中,它就有这样的两个字段,我就能通过这俩字段去获取新增级变化。
10:00
但是有时候呢,我们诶到公司之后你会发现啊,假如说我们那个公司里边业务系统那个买车后数据库啊,他可能他设计的时候呢,诶并没有考虑到我们后期这个数据同步的问题,他可能根本就没有什么opera time。Create time一般是有的啊,创建时间肯定是有的,但是oper time呢,它可能就没有。啊,那没有的话,那是不是就不能通过这样的方式去获取新增及变动数据了呀,那新增我能获取,但是变动我是不是可能就获取不到了呀,对不对,那这个时候咱们怎么去找这个新增及变动数据呢?来看文档。这个获取新增变动的这个数据的方式呢,其实咱们是有很多的啊,是有很多的啊来咱们看第一种啊这个A,那我们买so的表里边是不是就有创建和变动时间这俩字段呀,啊非常幸运,我就能直接通过这俩字段去获取了吧?啊但是假如说你没有这个时间,没有时间,那我们就不能用它了,那也得用其他的方案了啊,比如说咱们这儿呢,有一个第二种方案。
11:06
电路方是什么呢?如果没有这个变动时间,我得怎么做呀,可以利用啊,第三方的数据库监控工具,比如说K,比如说maxwa啊,那这些东西都是什么呀,都是一些数据库的监控工具,它能监控什么呀?能够监控我监控我们这个买SQL数据库的,哎,数据的变化。而且是实时的监控,就像我们一样,是不是实时监控一个文件的这个数据的变化呀,那这个开和max war这些东西呢,它能干啥呀,它能够实时的监控,你买SQL里边一张表的数据变化能理解吧,只要变化我就采集到你这个变化,然后把变化呢给你写到哪去,它可以写到卡夫卡当中,可以对接卡夫卡,对接到卡夫卡,那咱们是不是就可以把卡夫卡的数据对接到HT上啊,那这样一来是不是也能拿到每天的。变化数据啊,而且这个是什么呢?是实时的吧,这是实时的啊实时的啊,那这个东西其实原理很简单,大家应该都学过MYS买S克,咱们有一个概念叫补从复制对不对。
12:10
啊,还有印象吗?咱们学没学主动复制。有点印象对吧,那买SQ呢,我们这个主动复制是干什么用的呀。主动。不知。啊,其实主动复制更多是为了干什么,是为了缓解咱们这个数据库的读写压力,对吧?那假如说我们现在呢,我们业务系统当中,比如说只有一个MYSQL数据库只有一个,那是不是我们客户端的所有的读写请求全部都发往这一台节点呀。对不对啊,那这样一来,那我这个数据量用户量大了之后呢,这个诶服务器的压力可能比较大,那比较大啊,那大可以试想一个这样的问题啊,你说我们这个读写请求当中啊,是读的更多还是写的更多呀。其实读的更多啊。你就以咱们电商为例啊,以电商为例,那电商什么时候读,我只要去你这个,呃,APP里边,我去查这个商品,你这是不是都会读,那什么时候才会写呀,哎注册下单加购车是不是才会写,那相比之下肯定是是不是读的要多呀,对不对,所以说我们买S呢,有一个这样的机制,就是所谓的读写分离,用什么呀,用主从复制去做,那我可以给买S呢,哎给他给他设成一个主,然后呢,给他再配几个从。
13:20
啊,叫做slave master slave,然后呢,Slave干什么会从master节点呢,去同步数据啊,那这样一来的话,我们就可以怎么做了啊,就可以这样去做了,所有的读请求全部发往谁slave。啊,全发此类,而且此六书可以有多个呀,是不是多个可以分单独的压力,所他写请求呢,写到一台节点,写到master啊,因为你你写只往一台里边写,是不是能保证我们这个数据之间的一致性啊,对不对,是这样的啊啊那这就是咱们这个主从复制它的这个作用,那当然在这儿呢,呃,我们这个开呢啊,并不是为了做什么所谓的读写分离,咱们这只是为的同步数据,那这个开其实底层原理就是啥啊,给大家说一下,底层原理就是开,它其实会伪装成一个。
14:06
My circle的从。啊,它就是又伪装成一个slave,这个slave会怎么样,会从master这个主里边去同步数据吧,对不对啊,那这样一来的话,是不是里边只要有什么数据的变动,这个can是不是都能获取到啊,对不对,那获取到之后,把变动数据写到卡夫卡当中,那我们就能够获取变动数据了。啊,那当然这个能不能获取我们所需要的这个变动数据啊,能啊,这也标了麻烦,确实麻烦啊,你需要还得再搭建一个开,还得再怎么办,还得再往卡夫卡里写,再从卡夫卡往咱们的这个HD上写,相对来说要麻烦一些,但是这个呢,其实呃,还有一个优点,什么优点呀。它是实时监控的,对不对啊,咱们库采集数据是实时的吗?不是实时的,所以说假如说我们实时分析啊,大家后续做实时这个系统的时候,实时项目的时候啊,我也要分析买SQ当中的数据呢啊,那这时候你获取监控买SQ,你还能用S库op去导数据吗?就不能的,你只能用谁啊。
15:07
只能用开,或者用什么maxwa这些工具,它们的原理都差不多啊,是这样的啊,所以大家这个东西呢,也要了解一下,了解一下啊,就是即便说没有这个字段,我们也是有办法去获取变动数据的啊,也是有办法的啊好,这个咱们搞清楚,完了之后咱们再往下看啊,还有其他的一些手段,当然这个下边这个手段就嗯,那就不太靠谱了啊啊一般咱们要做的话就是前两种啊,后边两种咱们简单看一下是怎么去做吧,这可以怎么做。逐行对比,前后两天的数据逐行对比啊,咱们逐行对比啊,你说咱们逐行对比,比如说啊,我这个每天都从my sol当中,咱们去怎么做呀啊去导一份全量,每天都导一份全量啊,当然呢,你不用把前面的全全保留下来,你比如说我只保留前一天就够了啊,比如说14号的时候,我把14号的倒一份是不是拿过来了,我留着它,然后到了15号呢。是不是把十五行的这个数据再导一份过来呀,然后两边是不是肯定不一样,对不对,逐行对比是不是能找到那个新增级变化的呀,啊是能找到的啊,然后找到之后呢,那怎么办?是不是14号就没有没有价值了,删掉啊然后呢,到了16号这个15号删不删。
16:14
不能删,你得留着,你得留着啊,到了16号,再把16号的拿过来,再跟15号的做一个逐行对比,是不是也能拿到今天的变动数据啊啊这个就是太笨了,这个方法啊,咱们不这么做,一般情况下啊,这也标了啊,Low就标low,那再有一个呢。就是要求咱们那个业务数据库,就要求咱们业务系统去给咱们提供这个变动的流水啊,这个后边写了靠人品和颜值对吧?啊就是说你让他给你提供,但是人家那边呢,出于这个业务的考虑啊,出于他那个业务系统他那个性能的考虑,可能这个呃变动流水是不好给你提供的,那所以说呢,这个呃就更不太靠谱了啊,就不一定你跟他要,他可能说提供不了啊,你自己想办法去解决吧啊所以这个方法也不靠谱啊,那呃,既然咱们大家呢,这个呃,人品跟颜值呢,呃人品应该都还好,但是颜值不咋地是吧,那所以说这种方法咱们就忽略不计了啊呃,靠谱的东西呢,还是前面那俩啊,咱们把这俩搞清楚就行了啊啊行,这就是咱们获取当日变动数据的这个方式啊,那当然咱们这儿呢,直接用这俩字段获取的啊啊,那这块咱们搞清楚,然后再往下呢,实际上就正式进入到我们这个呃,拉链表的最重要的一步了,对吧,最重要的一步就是干啥,就是合并弄信息对不对。
17:31
这是咱们这个拉链表的核心啊,其实这呢就是写circle了啊写circle了,那这一步呢,我们一会再做吧,咱们先下课休息会啊,来录一下视频。
我来说两句