00:00
具体思路。好,来,大家认真听啊。嗯,这个是我们每天从买搜狗当中导过来的这个数据,对吧,有今天的领取,有今天的使用记录对吧,那这张右边我画的就是咱们这个实时表啊,优惠券领用实时表,按天分区,按天分区。啊啊来,咱们分析一下这个数据每天过来之后到底怎么插入这张表当中啊,这里边咱们分为两部分啊,一部分新增啊,也就是领取领取记录,一部分呢是使用记录啊,这个使用里边包括下单和支付对吧?啊,咱们就先当成一类就行啊,那这个到底怎么做呢?啊,首先对于新增来说很简单啊,新增咱们直接就是放到今天的分区里是不是就可以啊,关键是对于这个诶使用记录怎么处理。啊,他怎么处理。怎么处理啊?啊,前面分析过了,我们需要拿着这个使用记录去更新之前它这个它对应的那个领取记录,对吧?啊,因为你使用肯定你这个有一个使用时间,那你到底是使用的是哪个券呢?你需要找到你之前领取那条记录,然后呢,把它那个使用时间给它更新了,是不是就行了呀,应该是这样的一个做法,那这个怎么去操作呢?这块到底怎么实现呀。
01:19
啊,怎么怎么实现。啊,涉及到have当中啊,它这个数据的修改了,那我们就得知道have当中数据怎么修改,是不是得先把数据查出来,然后呢,做一定的判断,修改完之后再给它放回去,对吧?啊,那所以说咱现在要做的第一件事儿,就是得先把我们需要修改的那几条记录得先找出来,对不对,那找出来怎么找啊。啊,其实要找的话,也不是说只找那几条,应该是找什么呀,找那几条所在的分区,因为咱们修改是不是只能以整张表为单位,或以整个分区为单位啊,那所以我们首首先得需要先把那个对应的分区找到,那怎么找啊这个。
02:02
怎么着?根据什么找?你看啊,咱们每条记录当中是不是都有这样的几个时间,领取时间,使用时间啊,对吧,那现在我相当于我们今天使用了,对吧?所以你今天的using time或者是use time是不是等于今天的日期,所以就会出现在咱们当天的新增级变化里边啊,这个没问题,然后呢,我可以根据这个使用记录,我去找他的啥呀,它是不是也有一个get time啊,Get time是不是就它的领取时间,OK,那根据领取时间我是不是就能确定这条使用记录啊,它是位于哪一个分区当中的,对不对?比如说get time等于2020年1月1号,那我是不是就去找2020年1月1号的那个分区啊,咱们就可以把这个对应的分区查出来,整张分区都查出来啊,但是你要知道啊,你今天的使用记录。可能是前边是不是多天领取的呀,我可能我用户A使用的是前天领的,用户B使用的是昨天领的,所以说你这个要修改的分区是不是可能有多个呀,对不对,咱们把这个多个分区给它拿过来,来放到咱们这个位置了,那放在这儿的是不是就是我们要被修改的数据啊,大家大家要知道啊,虽然我们是把这个整张分区都查出来,但是它这个整张分区,整个分区里边每条都要去修改吗?
03:22
不是的,是不是有可能只修改里边的某几条啊,啊,大部分注意是不是不变的呀,对不对,这个我们要搞清楚,哎,好,这是咱们将要修改的分区,OK,那一会儿咱们是把这个数据里边需要修改的那部分给它修改了,然后不需要修改的呢。是不是原样不动的也得放回去啊,对不,因为咱们是什么是insert over right,因为right是不是原来那个分区的数据,不管有没有,是不是全没了呀,对不对,没了之后,我所我得把这个咱们查出来的数据,不管你有没有改,都得再放回去才行啊,是这样的啊,那现在咱们整个思路已经大致清晰了,对吧?那现在咱们来思考一个细节啊,就是这儿到底怎么改。
04:03
啊,而且呢,咱们刚才也说了,这里边儿有一部分是要改,有一分有一部分是不用改呀,对不对,那这个怎么办。具体怎么操作啊,判断一下对吧,哎,没错,判断一下,那怎么判断啊,怎么判断他到底要不要改。怎么判断?哎,怎么判断呀,你想一想啊,什么样的才会才需要改呀,是不是出现在今天的新增级变化的那些记录我才要改呀,对不对,这也没错吧?啊,那OK,那你说怎么去判断?呃,我这个需要修改的分区当中,哪些数据位于今天的新增级变化里边呢?怎么判断呀?怎么判断?其实你可以这样去做啊,诶这是我们要修改那几个分区对吧,咱们先拿到,然这个呢,是我们今天的新增级变化,咱也拿到,然后呢,他俩做一个啥。
05:04
做一个对比,怎么对比啊,在这呢,我们可以用join对比啊,重要那重要的那个连接条件应该是啥呀?是不是就是那个领取记录的ID啊,对吧,就是ID用它作为连接条件,OK,那你说他俩照你的时候,你说这两张表或者两个子查询,那咱们的这个对应关系应该是怎么样的呀?这是我将要修改的分区,这个呢是我今天的新增级变化,你说它俩对应关系应该什么样的?对应关系其实就应该是这样的,哎,有什么呀,有公共部分也有什么,也有各自独有的部分。啊,那咱们分析分析这几部分分别代表的什么意义啊,来那公共部分,也就是他们俩是不是能够照应上的那部分啊,这说明什么?说明是我原来的分区里边有你今天的新增变及变化也有你,那就说明这部分应该是啥呀?对,这就是要修改的那一部分对不对?那上面那部分呢?这是不需要修改的,就是前边领了啊,而且已经使用了,或者啊或者领的并没有用今天对吧,那这样这样一来的话,那是不是就是他不用变啊,不用变就是不用就是不用修改了,直接放回就行,那这部分呢,对,这是今天新增的领取记录,对不对?诶那OK,咱们把这三部分数据搞清楚啊,诶搞清楚之后呢,那接下来咱们来分析啊,这个数据咱们最终我要返回的应该是哪部分。
06:25
啊,哪部分要返回,哪部分要插入到这张表里,对吧,哪部分啊。诶,好像是都要返回吧,你不变的这个是不是也得返回去,修改的,是不是也要返回去,新增的要不要。也得放回去啊,对吧,也得放回去,那所以说既然我要返回所有的数据,那你说咱们这做照的时候用哪种照的方式。全外联负autodo是不是没问题,那所以最终咱们基本上定下来了啊,我应该拿我要修改的分区啊,就查出来那几个分区,先拿过来作为一个诶一个子查询,然后呢,再把今天的新增级变化也作为一个子查询,他俩呢作为一个全外联啊,其实做完全外联之后呢,那咱们就能去判断了,哪部分要改,哪部分不要改了,怎么判断啊。
07:07
嗯,这块具体去写这个serve怎么判断呀。那其实这块我们可以利用这个for al John它的特点,因为咱们刚才哎分析过了,我们要用for John对吧?For John呢,那这部分字段是不是会补为now,这部分是不是也会不为闹啊,对不?那咱们可以怎么去判断了呀,什么样的需要改呀,是不是左边这个表不为闹,并且右边这个表也不为闹,那是不是就。相当于是就是要修改的那部分啊,对不对,是不是就这个道理啊,那大致就是这样的一个思路啊,啊然后呢,哎,该改的改完之后呢,我们把这个所有的数据呢,统一怎么做给它放回去就行了,哎,是不是大致是这样这样的一个思路,哎,那我现在问一下这个放是不是也得考虑一个问题啊往回放。我们放咱们应该是音色的音,音色right对吧?啊,这个怎么放啊。因色投,因为这是一张分区表,你要知道这是分区表,你往里插入的时候是不是必须得指定分区。
08:06
对不对,必须得指定分区,那这个分区怎么指令。Part dt等于多少?等于get time。直接DT等于该。能这么写吗?这个语法能支持吗?支持吗?不支持这个语法呀,啊,DT等于那块呢,你只能写一个静态的值啊,你因为iner的音度啊,一个表加帕地NDT等于这叫静态分区,就是你写多少,插入了哪个,你是不能写动态值的。啊,那现在怎么办,因为大家肯定都知道啊,我这个这部分数据呢,我其实里边应该是来自于多个分区,我要往回放,是不是也得放回到原来的分区啊,那这个哎,动静态分区肯定是不行的,那咱们应该想到谁呀?是不是有一个概念叫做动态分区?动态分区对吧,那动态分区的原理大家还记得不。
09:03
好像又不记得了,没事啊,一会儿咱们再回顾一下就行啊,啊也是这块咱们往回放的时候呢,需要用在动态分区啊,当然动态分区大家现在不记得也无所谓,一会儿咱们写测略的时候呢,我再给大家回顾这个动态分区的原理啊,大致就是这样一个思路。啊,那把这些工作都做完之后呢,我们这一天的新增及变化,那就算是插入到了这个累积型快照时表里边了。啊,这个逻辑稍显复杂啊,稍显复杂啊好,那先讲到这儿,我把视频录一下啊。
我来说两句