00:00
先看这个第一个啊,叫做优惠券领用时表,对吧,它叫做累积型快照实时表,叫累积型快照时表啊好,那接下来我们来回顾一下累积型快照时表它适用于什么样的业务。什么样的来着。周期性的业务对吧?呃,那这个优惠券领用这个事儿啊,呃,可能他的这个周期性还不是那么明显啊,呃,谁更明显一些啊,订单其实更明显一些,因为一个订单下完单之后,我那个状态是会周期性的变化对吧?诶未支付已支付已完成啊,已退款等等的,是不是有这个固定的周期啊啊那其实对优惠券来说呢,其实也是有一个固定的周期的,什么周期啊领用。然后呢,使用下单,然后呢,使用支付,最终是不是还有可能会过期啊,对吧?啊,这是不是也是一个固定的周期啊,也是一个固定周期,那所以说他也做了一个累计型快照时表啊,也做了一个累计快时表啊,咱们把这点搞清楚,呃,这点搞清楚之后呢,咱们先来分析分析呃,优惠券领用实时表,这这张表啊,它的这个结构是什么样的啊,首先先第一个问题,这张表当中一行数据指代的是什么啊,这一张储蓄指代指代应该是什么呀?指代的是不是一个用户对一个优惠券的一个领取记录啊,对不对,其实不光是领取记录,那我这一行数据会一直怎么样,会一直追踪这个。
01:24
整个的生命周期对吧?啊,就是你什么时候领的,什么时候下单的,什么时候使用的,什么时候过期的,我是不是正常都得追踪了,对不对啊,这是我一行数据所指代的这个东西啊,咱们把这点先明确啊,完了之后呢,咱们看一下这张表当中它具体的字段,来,我们拿过来CTRLC啊,然后呢,放到笔记当中来看一下这张表当中字段啊,还是先找它传统的这个实时表的字段,传统实时表字段就是维度外键以及度量值外啊,维度外键首先第一个用户ID,优惠券ID,咱们得知道是谁领的什么券,对不对,然后呢,还得知道什么时候领的,看到没有啊,这个没问题,对吧?啊,这是咱们这几个呃,外界啊完之后呢,咱们接着走啊,接着走,看它的度量值,这个度量值好像没有。
02:12
对于优惠券领用这个事儿来说,有度量值嘛,啊,因为领券是不是就是领一张啊,有什么领了多少钱嘛,这个其实并不是,呃,这个度量啊,它是应该属于什么,属于优惠券的维度字段,对吧?那所以这个东西呢,咱们度量值就是啥,还是行数对不对?比如说这个优惠券啊,我一共被多少人领了,那是不是数行数,我优惠券一共被多少人使用下单了,是不是也是数行数,只不过加个过滤条件呗,对不对啊,还是行数是它的度量值啊啊,那咱们搞清楚行,那这个完事之后呢,咱们接着继续分析啊呃,维度字段也说了,度量值也说了,那接下来呢,来咱们分析分析啊,这张表啊,啊,咱到底怎么去维护它啊,就是怎么往里边导数据。啊,怎么导数据啊,这是咱们要分析的事啊。
03:00
呃,那既然要提到这个怎么往里边导数据了,那我们可以先跟咱们之前的那个市值表先做一个类比啊,啊先做一个类比啊,那做什么类比,我们看一看上面。啊,这个表。来看这儿啊,现在这几个事物型师表吧,事物型师表咱们这个往这张表里导数据的时候,咱们怎么导的呀。怎么导事物形是不是不是就是增量表对不对,增表很简单,只需要把我们从买资当中导过来的当天的增量数据放到这个事物营实时表的当天的分区里,是不是就完事了,直接往里一放就就就就不用再去什么呃维护,不用再去修改什么的了,对吧,直接放进去就搞定啊这是哎剩余时表,那接下来看这个周期型的。周期型的其实也比较简单,对不对,也是直接把从哪so当中导过来的当天的全量数据放到这个周期型快照时表的当天的分区里,是不是也是完成了,就不用再管了吧?哎,搞定啊,那接下来咱们说这种事务型实时表啊,不是这个累积型快照时表啊,那它跟前面有啥区别,哎,对它的区别就在于什么呀。
04:13
在于你每天往这张表里导数据的时候呢,你需要干啥呀?对,你需要改之前的数据。这是最明显的一个区别。为什么要改这些数据啊,因为咱们之之前分析过了啊,那这张表来看一下,咱们是不是有这样的几个时间,领取时间,使用时间和使用,呃,这个当时使用下单和这个是使用支付对吧?呃,当时这正常应该还有一个啥呀,还有过期时间对不对,这个过期时间是咱们忘了从那个买SQL那边倒过来了啊,忘了倒了应该倒过来啊呃,这个当然倒不倒,其实都是一样的,就是多一个字段上一个字段的事啊,那这个大家先明确啊,这个呢相当于是什么呀,相当于是我们这儿有几个时间,而这几个时间呢,你是不是很有可能不是一次性的就直接能给他写满呀,对吧,那正常我假如说我这个券呢,我今天领了啊,在买思Q里边领,领完之后是不是在买SQ里边有一个这样的记录啊,对不对,谁领了什么券了,是在什么时候领的,但是还没用,没用的话是不是字段就是no对不对,那这时候我会把这个出据呢?从哪从MYS导到哪导到咱们的这个,哎,书仓里边,那书仓里边是不是就会有一条这样的数据啊,它的使用时间为no,那到了第二天。
05:25
那第二天第二天我这个数据呢,它会怎么样啊。啊,它会变化了,对吧,那变化假如我使用它了,使用它是不是会有一个使用时间,等于第二天啊,使用下单,使用支付,比如说都是第二天,那时候这个数据是不是会变变化呀,那变化之后咱们是不是这张表,你甭管采用哪种同步方式,变化是不是都得同步过来呀,对不对,那同步过来了,同步过来之后你需要怎么做,是把这个变化数据再插入进来吗?不是的,你需要怎么做呀,你需要拿着这个变化之后的数据去找什么,找之前那个。哎,昨天那条数据找到之后得干什么,得把它那个,诶使用时间得更新一下呀,对不对,那是不是他需要相当于是修改咱们数仓里边的历史数据啊,啊,就是昨天查的数据,我或者是前天查出的数据,我今天我需要给你修改。
06:11
啊,这就是他的麻烦之处吧,对不对,这是麻烦之处啊,也就是说咱们刚才呢,把这种周期型快照时时表和累积和那不是啊,把这种累积型快照时表跟咱们前面那两种时表做一个对比,咱们对比之后最终啊,咱们最重要一点区别就是什么呀?啊,就是累积型快照时时表,你需要修改这张表当中的数据,这是不是一个最重要的一个区别呀啊。好,那接下来咱们就从这开始接着分析啊,既然要修改这张表当中的数据呢,那我问大家一下,我们怎么去修改have表当中的数据?是你是不是需要修改have表当中,哎,这个已经存在的一条数据啊,怎么修改。大家学have已经有一段时间了,咱们学have这么长时间的,用过修改的这个语句吗?MY4里边是不是有什么呃,Update啊,或者有什么删除delete对不对?你在have当中用过这个语句吗?从来都没用过,那have到底支不支持修改呢?其支其实是支持的,其实是支持的啊,呃,只不过就是咱们通常情况是不用的啊,还有当中其实支持我们这个随机的修改和删除操作的,就是update语法和这个delete语法都支持,只不过默认情况下是不支持的啊。然后你要想让它支持的话呢,你需要满足几个条件,第一个你这张表啊,必须得是分统表。
07:40
只有分表它才支持修改和删除操作啊,为什么是分童表啊,大家说,因为假如说啊,如果说你这张表就是一个普通的表啊,那have里边表是不是数据量可以很大呀,因为数据存在在板子上,那很大的这个数据,你对它进行随机的删除修改,你说这个性能能高得了吗?肯定特别差,对不对,因为你需因为而且还有当中也没有什么索引这些东西,对吧?那你需要怎么做呀,你需要先从海量的数据当中先找到这个文件,找到这行数据,先定位到另到之后呢,再对它进行修改,那这个性能肯定比较差,那所以还有这边为了呃提高这个修改的性能怎么办呢?要求你这是分筒,什么叫分筒啊,大家说。
08:23
分组是不是把还有一张表下面的这个数据呢,分到多个文件当中啊,分到多个文件当中,那你说你要修改的话,那是不是可以首先先定位文件,定文件里边,再从小文件里边去修改这个数据,是不是就好好改了呀,这个性能要高一,所以它要求第一点得是分钟表,那第二点呢,你得去have的这个配置文件当中去加入几个参数啊,去声明我支持这个修改操作啊,得得去修改配置文件的,这个在海的官网上都有详细的说明啊,所以你得做这两件事儿啊,所以这个条件呢,相对来说比较苛刻啊,对吧,你还得分通啊,那所以说一般情况下咱们去修改have当的数据呢,咱们也不让也不这样去做,那一般情况下,咱们怎么去修改have当中的数据呢?啊,怎么修改啊,啊一般咱们是这么去做的啊怎么做呀,比如说我这儿呢,有一张表,我现在要修改这张表的数据对不对,那所以咱怎么修改。
09:14
我会先把这张表当中的注意啊,是这张表当中的全部数据。先查出来select星from这张表,查出来,查出来之后呢,怎么做呀,当然不能select星啊,你得select from这张表,然后呢,每个字段逐个去判断,怎么判断呢?用if去判断啊,If去判断或者用K也行啊,然后呢,哎啊去判断有一个word条件哎,判断一下哪个字段需要改。哪个字段不用改,用改的,哎,我给你改了,不用改的,保留原来的值,哎,是不是在select过程当中给你去判断是否修改啊,那完事之后呢,怎么办,再把你查出来的这个已经修改之后的这个结果再insert overri回去。
10:03
哎,那这样一来是不是就实现了这个have表当中数据的修改啊,一般情况下都是这么去改的啊,一般都是这么去改啊,这是我们have当中啊,这个数据怎么去修改啊,这个要搞清楚啊好,那我把视频先录一下。
我来说两句