00:00
呃,好了,各位同学,那咱接下来要做的工作呢,就是这个拉链表的每日装载,那在这呢,我先写上一个每日啊,呃,当然要说这个每日装载的话呢,实际上我们将来比如说从14号之后,对吧,15 16 17 18 19,每天是不是都要去执行一个这样的四口语啊,对吧?但实际上呢,呃,从第二天开始每天执行这个逻辑是不是都是一样的,对不对?所以在这儿呢,我们也是以一天的数据为例啊,咱们以哪一天为例呢?2020杠零六杠幺五为例,但是大家都知道咱现在这个数仓里边有15号的数据嘛,并没有,所以说一会儿咱们这个三写完之后呢,你查肯定是没数的啊呃,这个没数那也没关系,咱们只要保证逻辑是正确的就行了啊等我们什么时候就能有15号的数据了呢?咱得把14号的数据得从头跑到尾,是不是相当于这14号这一天才结束了呀,对吧,结束之后咱们才能生成15的数据,再进行这个计算,是这样的,所以咱们现在呢,还不能有15的啊,OK啊好,那现在呢,咱们就,呃,主要是把这个逻辑搞清楚就行了,那接下来咱们来看一看15号的这个数据,我们到底应该怎么计算,写三号呗,对不对,大家都知道,最终这个三肯定是一个in inside,呃,肯定是一个in inside,后边加上一个select,没错吧,从一个地方查数据,把这把数据最终写到一个地方对不对?然后中间是什么呢?就是咱们这个计算逻辑对吧?啊,关键是这个计算逻辑应该是什么?嗯,分析分析吧,这个到底咋写,不知道从哪开始动手对吧?嗯。
01:26
不知道从哪动手,那还是怎么办呢?你还是得先明确一下啊,就是具体的你的这个数据源应该是什么,最终你的目的地是什么,然后咱们再去搞清楚中间的逻辑,先明确一下数据来源啊,数据来源到底是哪儿呢?这个咱们从哪儿能看出来。其实我们从这个用户的,呃,用户维度表,这个数据流向这个图上面应该是能够看出来的,对吧?OK啊,就是大家再再去写某一个表的这个装载语句的时候呢,如果你不知道从哪下手,首先你就得先干啥呢,先明确数据到底来自于哪个表,哪个分区,最终呢,又要写到哪个表哪个分区,然后再去考虑中间的计算逻辑啊来吧,那咱们先来分析分析我这个数据到底来自于哪个分区,好,那现在先开这个是首日是不是已经过去了呀,对吧,就不用管它了,我们来看每日啊,这个呢是咱们每日的数据流向。
02:15
对吧,那我这个数据具体是来自于哪个分区,最终要写往哪个分区了呢?这个咱们怎样能看出来,这个其实咱们看哪就能看出来,看这个箭头其实就能看出来,对吧?看箭头方向呗,对吧,是箭头来自的那个地方是不是就是数据来源,箭头指向的地方就是数据的目的地呗,对吧?来,那咱们现在先看一下数据来源,数据来源呢,我们从这个箭头上来看啊,应该是由。两个对不对,两个两个来源对不对,那这是一个箭头,这是一个箭头对吧?OK,那连来源呢,首先一个就是哪呢,这。对吧?这是咱们2020年6月15号对不对,这个分区,那当时哪哪哪层的分区呢?是ods层那张表的分区,对吧?里边放的是什么?是我们今天的是不是新增级变化对吧?OK,那这个是咱们的一个数据源,那还有谁是咱们的数据源,其实你看这个箭头是不是也能看出来,这个是不是也是咱们的一个数据,对吧?这个是哪儿呢?这是拉链表的9999分区,这是咱们的另外一个数据源,对吧?好,数据源搞清楚了,接下来我们再来看目的地,目的地是哪?
03:16
目的地其实也有两个,一个是哪呢?是9999分区没问题吧,还有一个是哪。是是哪是这个过期的分区吧,对不对,这是不是就是咱们的数据源和目的地啊,对吧,然后你需要明确一点啊,就是咱们这个数据源和目的地里边是不是都有我们这个拉链表的9999分区。是是是这个道理吧,同学们,OK,那这是什么意思呢?这什么意思呢?也就是说我们最终在写这个serve的时候,你肯定有一个这样的操作,什么操作呢?你需要先把数据从9999分局是不是查出来啊,对吧?查出来之后你进行一系列的处理完之后,需要怎么办,再把数据给它是不是写回去啊对不对,这是不是就是我们为什么数据源和目地都有这个分区的一个原因啊,对吧?哎,这一点搞清楚好了,那截止到现在呢,那咱们的数据源目的地就明确了啊,再明确一下,数据源两个,一个是拉链表的996分区,一个是ods层表的是不是当日分区对不对?那接下来往下走目的地,目的地两个,一个是996分区,一个是哪的是过期分区,好了,数据员目的地都明确了,那接下来我们要考虑的是不是就是中间的这个计算逻辑了呀,对吧?哎,来大家琢磨琢磨,这个计算逻辑到底怎么搞啊。
04:27
说实话这个有难度啊,这个是有一定的难度的啊,尤其是大家这个从学完海语之后,这个三基本上没怎么写过,对吧?啊,这个确实对来说是有难度的啊,是这样的啊,那所以在这呢,我为了方便大家理解呢,我特意的画了一个这个PPT啊,这个PPT呢,哎,它其实就把咱们这个就是拉链表的每日装载的具体思路给它详细的展示出来了,那也可以这么毫不夸张的说,只要大家把这个图能看懂,那这个circle我觉得大家应该差不多就能够会写了啊是这样的啊,那做完接下来呢,就以这个图啊对吧,来作为咱们的这个这个这个这个案例,咱们去演示一下,看看这个到底怎么去做拉链表的每日状态,那首先呢,我们先看一下这两部分数据,这两部分数据其实指代的就是什么呢?就是我们刚刚所说的这个拉链表每日装载所需要的那两个数据来源,还记得两个数据来源吧,一个是拉链表的9999分区,一个是ods层的当日分区,对吧?好,那现在大家来观察观察这两部分数据,你看能不能。
05:28
看懂这两部分数据,咱们怎么观察啊,首先那先看这个,这是拉链表九九九九十二杠三幺分区对吧?那这里边其实在我们做这个拉链表的每日状态之前,它里边放的是什么?是截至前一日的全能分析吧,没问题吧?啊然后在这个分区其实存放的是当日的新增一变化吧,应该是这样一个逻辑,对不对?好,那这两部分数据咱们怎么去看啊,咱们得分部分去看,哎,那注意观察一下,我这两边的数据实际上实际上是有对应关系的啊,咱们分哪几部分去干呢?咱们分三部分,那首先我们先看这两条数据对不对,你会发现这两条数据是不是指的是六和七号这两个用户啊,对吧?它是不是既出现在了左边,又出现了右边,没问题吧?OK,那我们再来看这部分,这部分是不是只出现了左边,没出现在右边对吧?那这部分呢,只出现在右边,好,那这三部分数据我们应该怎么解读呢?来先看中间这部分,这部分既在左边有,右在右边有,这意味着什么呢?这什么意思呢?
06:28
对,实际上是指的就是六号和七号用户,是不是是原来的老用户今天发生了变化呀,是这个道理吧,各位同学,OK啊,应该是能能想明白了,OK,您看六号用户原来呢叫小华,那现在呢,变成了大华了,对吧?原来叫小强,现在叫大抢,对吧?是啊,都长大了是吧?好,那接下来我们继续往下进行,我们再来看这部分用户,这部分用户怎么解读,只是老用户今天没变,对不对?好,那这部分用户怎么解读?对,原来没有他们,对吧?这是截至前一日的,是不是全量最新,全量最新里边有两层含义,一个叫做全量,一个叫最新,对吧?全量是不是指的是全部用户啊,对吧?啊,原来的全部用户里边没有你,那今天有了,那不就是新能吗?对吧?这就是咱们这三部分用户啊,这样的一个解读,好,那完之后我们就往下走,刚才分析过了,这实际上就是我们做拉力表每日装载的数据来源,对吧,那也就是我们需要做什么工作呢?我们就需要从这样的两部分数据当中去找到,找到什么。
07:28
找到什么,找到我们需要的那两部分数据,对吧?还记得咱们那两部分数据分别写往哪儿吗?两部分是,一部分是写往那个拉链表的9999分区的,还有一部分是写往哪儿的,是写往那个过期分期的,对吧?那你说写往9995分区的应该是什么数据全量最新吧,没问题吧,写往过期的分区的数据不就是过期数据吗?对吧?也就是我们现在需要做这样的一个工作,我们需要从这两部分数据里边找到。截至今天的全量最新和过期的数据是不是这个道理,OK啊好,那现在咱们就来分析分析,到底怎样能找到这样的两个数据,咱先看那个全量最新啊,好,来分析分析吧,怎样能从这儿这里边儿找到咱们那个今天的全量最新。
08:14
因为全量最新是不是才能往9999放啊,对吧?OK,怎样找?还是那句话,全量最新呢,包含两层信息,一个是全量,一个是最新,对不对?当然可能听起来像废话一样啊,但是这个东西你得深入的体会一下,全量最新对吧?全量到底啥意思?什么叫全量?全量叫所有对不对?所有用户是不是叫全量对不对?那什么叫所有用户?一号到九号全算上,这是不是就是全量用户,也就是说我们全量这些里边你得包含一和九这所有用户的信息才行,这叫全量,对吧?那最新怎么体现,怎么怎么理解的,最新是不是就是最新状态啊,对吧?好,那我们是不是就得找到一到九号用户的最新状态,好这个怎么找,先说谁是他的最新状态,这是不是也得分三三种情况去看呀,对吧?OK,那我们分哪三种,就是这三种。
09:04
对于这部分用户而言,他的最新状态就是什么?前一天的最新,那就是今天的最新,因为他没变嘛,今天对不对?好那么说对于这个六和七号用户而言呢,后边的是不是他的今天的最新状态呀,对吧,相相较于原来变了嘛,对吧?好,那这部分用户呢,这没得说,原来都没有他那所以今天的状态一定是他今天的最新状态,没问题吧?好,那这实际上就是我们要找到的全量最新,是不是应该是这两部分,哎,呃,少少画了一个啊,应该是到到五对吧?啊这边呢,是从六开始,这两部分是不是就是我们要找的那个所谓的截至今天的全量最新,那他们最终是不是会写到那个999分区,当然你想一想,你说往九九分级写,咱们应该怎么写,是to进去还是right进去?是into进去还right进去right吧,你这已经是全量最新了,对不对,你得right,你不能into对不对?哎,这个应该是能理解的啊,相当于我们是把原来的这个全量最新查出来,然后呢,给它处理一下,得到今天的全量最新,我再给他,是不是给他覆盖掉了对吧?诶是这么一个逻辑啊好,那接下来继续往下走,全量最新已经找到了,那过期数据呢,在哪。
10:15
过期数据,什么叫过期数据,这不就是过期数据吗?这是不是就得过期数据对吧?OK啊,六号七号今天变了,那这不就是今天的过期吗?对不对,那所以他是不是应该放在咱们那个,呃,就是那个过期的分区里边啊对不对?OK,好,问题来了,那你放的时候能不能直接放,不能你得改一下吧,对不对,他的现在结束期不是999呢,你现在不能让他九九,你得改成前一天日期今天假,那是15,那你就得给他改成14才对,明白对吧?好了,那这就是我们的,诶全量最新和过期数据,好,现在问题来了,怎样找到这两部分数据对吧?咱们知道全量最新是这儿加这儿了,对不对,那过期是指这个地方,那怎样写circle啊对吧?怎样写circle能拿到这样的两部分数据呢?
11:00
什么意思?贺南,谁来的?首先你是不是得先写俩次查询,得先把这份数据跟这份数据得写,拿到这个是首先要做的工作,对吧?那之后呢,写来肯定是得写来,之后呢,之后琢磨琢磨琢磨。啊,怎么去搞,有没有同学有想法可以怎么做啊,有的说这对吧,啊这这样行不行,这样行不行。我也听见有人说union了,对吧,Union行不行,其实我可以告诉大家,John union都行,都行,那现在呢,我们先来讲一种思路啊,咱们先看这个John怎么做,来我们文档当中给的思路其实就是John啊,来我们看一下文档上做的一个什么John呢,他做了一个。哎,你想想你要是用照的话,应该用哪种照。肯定得用全外脸,为什么要用全外联,因为首先我们有一点要保证,你得拿到一个全量,对吧,你要想拿全量,你肯定得用副负特罩对不对,那所以在这儿呢,它会做一个全外点。
12:12
OK,好,那全外联之后,大家都知道我们会形成一个虚表,对吧,那问一下大家形成的虚表长什么样?行的虚表其实就长这样的,对不对?是不是有所有行所有列对不?这个所有行大家都知道,包括一到九,那所有列指的是什么呢?指的是左边这个子查询的全部列和右边这个子查询的全部列都得包含在这个虚拟表当中,这是咱那个虚拟表里吧,这个一定要搞清楚好了,完了之后,诶,照完之后,显然你会发现这里边有问题,这块是不是没东西啊,对吧?没东西它会怎么处理来着,大家都知道会补闹对吧?这个具体补闹怎么补,它是把这个地方啊,所有的行,所有的列是不是都补上到了呀,对不对?这个大家应该得知道才行啊OK,这所有的行所有列,这里也是同样的道理,是不是所有行所有列都到对吧?这个就是我们得到的一个虚拟表,好,那也是我们现在需要怎么办呢?从这个虚拟表里边去拿到全量最新,去拿到过期数据,对吧?好,那现在分析分析怎样从这个虚拟表里拿这个全量最新和过期数据。
13:14
怎样拿好,现在虚拟表摆在这儿了,对不对,怎样能拿到全程最新。你肯定得从他俩照的结果里边去继续select对吧?好,那拉时候问下来,首先要不要过滤,拿全量最新要不要过滤,咱们一个来啊,先考虑全,再考虑过期啊,拿强量最新要不要过滤。要过滤吗?不需要过滤啊,过滤V过滤是用来过滤什么呢?行对不对,那我拿全量滤芯,我不得拿全部行吗?所以说V2过滤是不是肯定是用不着的,对吧?没问题吧,所有所有行都得留下来好,那完了之后呢,怎样去写这个select语句,我能拿到这部分,加上这部分数据。嗯,Select,我能不能直接select星,From这个能吗?不能,你select星是不是把左边的字段跟右边段都拿出来了,对吧?那肯定不能select星,那你得怎么算来你得分情况对不对?是不是一到五行你应该拿左边这一半的字段呀,对不对,那后边呢,六到九行是不是得拿右边的这个字段呀。
14:21
大家说是不是应该是这样的一个逻辑,好,那琢磨琢磨怎样写这个circle,我能够实现前面这一半拿左边的字段,后边这一半拿右边的字段。怎么能实现?怎么能实现,其实是不是就是做一个判断就行了呀,是这个道理吧,哎,比如说我现在呢,想拿这个内幕字段啊,想拿内幕字段,想想拿这个内字段对不对,你怎样拿这个内幕字段零搜怎么写能拿到这个具体的这个你想要的值,你得判断一下,对吧?怎么判断这部分,你拿name的时候,你拿左边这个表的name对不对,那这部分呢,你拿右边内对不对,关键我这个判断条件我怎么写,我判断我这个判断条件怎么写,判断条件怎么写,是不是取决于你这两部分数据他们有什么样的这个区别啊对吧?来分析遍在这个虚拟表当中啊,OK,一到五行跟六到九行它俩有啥区别,唯一的区别是不是就是一到五行右边的这个字段全是空。
15:21
对不对,这是不是就是他俩的一个唯一的区别,没问题吧,好,那咱们假定现在啊,左边这个表我叫A,右边这个表呢,我叫BOK,好,那我现在拿这个最终的内幕字段的时候,我就可以这么拿了,我就依付一下是不是就行,If这个函数大家应该是用过的,对吧?好,If我判断什么呢?如果B的比如说ID是空对不对,是空,那你对应的行就是哪几行,是不是一到五行对不对,那这时候我就拿谁。我就拿A的name。对不对,没问题吧,好,那否则的话呢,否则是不是就是,呃,我B这边不为空啊,不为空是不是对应的是这边这几行,那我就拿谁,我是不是就拿B点内啊。
16:03
对不对,你是不是这样去写,那咱们这个内幕字段的这个表达式,我就能拿到这个最新的内幕啊,对吧,能拿到每一个用户的最新内幕,诶是这样的啊,就是将来你可以做一个这样的一判断,哎,就能拿到咱们所谓的全量最新的这个其实呃,是不是很难,其实不是很难啊,是这样的一个逻辑,OK啊,其实你这个道理其实也很很好理解,怎么好理解,相当于啥意思啊,就是说你这边为空,那就意味着什么?为空就意味着这些人今天没发生变化,你要变了,你不就出现在这个里边了吗?对不对,OK,那你没变就说明你这是为为空,对吧?没变我就取什么,我就取你原来的值,你变了我就取你今天的值,是不是原来就是这么个道理啊,对吧?是这样的,OK,好,那全量最新咱基本上就知道怎么拿了,好那接下来我们再继续往下走,那怎样拿过期呢?其实拿过期我们是不是也能从他俩照样的结果里边去拿,对不对?首先过期指的是这一部分数据,对吧,没问题吧,好,那首先我们需要怎么呢?行用不用过。
17:03
对一下。这个得过滤一下吧,对不对,因为这个你是不是其说白了只要六和七这两行就够了,对吧?得过滤,那怎么能把这两行过滤出来呢?左边不为空,右边也不为空,是不是就能把它俩过滤出来了,这就是它俩的一个特殊数,对吧?好过滤出来,过滤出来之后呢,拿哪个字段呢?你要知道你过滤出来你你其实是这么多的字段,对吧?我们只需要拿哪边了,只需要拿ae表的字段是不是就完事了,对不对,OK,那你直接拿过来之后,那就是咱们这个过期的数据了,当然拿的时候这个字段咱是是需要去处理一下了,对吧?OK,这个比较简单啊,怎么处理一会儿再说啊好了,那这样一来的话,咱们相当于就已经知道了,哎,我怎样去分别拿到全量最新和过期数据了?是这道理吧?OK,好,那现在问题来了。我最终需要干啥,是不是把需要把这个数据给它insert到咱们那个最终的表里,是有道理吧?OK,好,那现在问他怎么去insert。首先得明确一点,现在这个你拿全量最新的时候,你是不是应该是一个select语句明白对吧?Select from它俩的一个照样结果对不对?那你拿这个过期的时候呢,是不是也是一个select语表对不对?完了select from它俩的一个照样结果,那从我们刚才这个描述上来看啊,你这俩表得照唤几次?
18:19
得让两次对吧,因为你拉在这的时候,你是不是得从他俩撞里边去select对不对,那你select这个是不是他俩还得再撞一下对吧?OK,那这里边显然是不是可能需要重复的去写他俩的一个照语句,我要想只写一遍,我可以怎么做?用谁来着,公共表表达是VS是不是就行,对吧?我其实可以这样做,我先把他俩照的一个虚拟表先给它查出来,然后呢,用VS声明一下,声明一下之后,那下边咱是不是就可以select from那个虚拟表,在select from虚拟表是不是分别得到这两份数据了,涉及道理吧,OK,那这首先我们会用到一个VS先搞清楚,那接下来咱继续艾,就是即便你这用到了VS了,你也只能保证什么呢?就是说他俩之只只写一遍对不对,但是最终你这是不是也得写两个select对吧?这是一个select,这是一个select对吧?好,那完了之后我需得怎么了,是不是需要使用inser的语句,把它ins最终那个表里啊,对吧?现在问题来了。
19:14
我怎样通过一个inser接上这两个select,大家都知道inser select是不是一个iner只能接一个select呀,对不对,OK,那我怎样通过一个音色的接两个C。怎么能接上呢?对吧,这是一个select,这是一个select,那一个音色是不是只能接一个select,对不对,你怎么能接上。这个好像有点难度了,对吧?有点难度了啊,那同学可能会写啊,那我就不不给他用一个incet了呗,我用俩in色对不对,那用俩ince怎么办呢?我是不是这个我单独的作为一个circle,然后呢,我in色到一张表里对不对,呃,In in一个这11111个一个目的地对不对,OK,那我这个呢,我是不是再来一个in色的,接上这个select,我再给他来个IN2最终的目的地,我分开写能不能行,分开写能实现这个效果,但是呢,不太好,我们最好保证一个表,我就哎一天就执行一个in s语句对不对?所以在这呢,咱们最好不分开写还是合并在一起写啊好,那现在问题来怎样通过一个in s对吧?把这两个s select的数据都给它插入到咱们这个目标表里,怎样去做?
20:23
嗯,跟这个其实跟动态分区关系不大啊,你现在要做的是什么?是一个三音ER得接上俩谁拉去了对吧,怎么能接上啊,其实很简单,你注意观察一下,就是我们这两个select查出来的数据,他们有什么样的特点?字段结构是不是完全一样,对,所以说我可以怎么做呀,我是不是可以给它UN念起来呀,对吧,没问题吧,UN起来之后,相当于我是不是就把一个select union成两个select了,就大家要知道union union它连接的是什么。连接的是select查询,你不能说直接把两张表给它UN念起来,Union连接的就是select查询,对吧,那所以说那我现在一个select,再我是不是来个union,它俩就连接成一个了,对吧?好,那现在是不是相当于就变成了一个大的select了,没问题吧?好,那接下来就可以怎么做。
21:14
是不是就可以用一个in色去接上这两个select了,对不对,OK,那接下来咱们继续往下走,那IN3的时候,我们是不是得in色套最终的咱们这个拉链表里啊,对吧?但是你要知道拉链表是什么表,是分区表,分区表我们最终是不是得写着一个part t dt等于多少啊对不对?但是现在问题又来了。来什么了呢?你要知道这两部分数据他们最终其实应该被发往不同的分区才对,没问题吧,这个是全量最新理应进入9999对不对?那这个呢,是过期数据,应该写到过期分区,它俩肯定不是一个分区,对不对?那完了之后现在问题我那个insert后边那个part批里边的DP和咋写呀。我写我怎么写呀。对不对,这个是不是就有有有有点麻烦了,对吧,因为你DT后边你要写DT等于多少,你只能写几个分区,正常情况下你要写只能写一个分区,对吧,那只能写一个,是不是这分数据最终肯定是发往一个分区来,对吧?这个肯定是不对的啊,那我现在问题来了,那咱们能不能说我使用一个音色的语句把这个数据发往不同的分区呢?能不能呢?
22:20
可以,这里边儿我们需要用到一个技术点叫什么来着,对have当中的动态分区dynamic partition,对吧,动态分区啊,是这样的啊,OK,好,这个动态分区大家还有没有印象。呃,可能有同学,有可能有同学没有了啊,那现在呢,我先给大家明确一下啊,就是动态分区,它能实现一个什么样的效果啊,它能实现就是将将什么。来将就是一个ins塔对吧?将这个数据呢发往不同的分区,那这就是动态分区,它能实验的效果,OK,那咱这是不是就正好需要将呃,这个使用一个音色呢,将数据发往这个多个分区啊,对吧?OK,那我们这儿其实就可以用动态分区去实现咱们这个效果,好了,那就是在这儿呢,我们最终的方案应该什么样的呢?应该是这样的啊,它俩进行union组成一个insert select之后我后边呢再跟上一个啥。
23:09
跟上一个动态分区,把数据发往这两个不同的分区,哎,那这样一来我们这个数据,哎,这个状态就算是完成了啊OK,好,那整个逻辑看起来是不是还是有点复杂的呀,对吧?那最终我给大家总结一下啊,咱们这个从前到后到底怎么做,其实首先我们需要做的一件事儿就是先写两个子查询,把这两部分数据是不是得先得拿到了,对吧?拿到之后咱接下来需要怎么做,给他俩是不是做一个全外联,全外联之后呢,是不是用V4S先给他提前的声明出来对吧?声明出来之后我们就可以说分别写两个select去获取全量最新还有过期数据了,对吧?那为了方便插入,我需要先给它做一个union all连接成一个音,呃,这个拉之后呢,再补上一个iner的动态分区,把这两部分数据再分开写入到不同的分区,诶,那这样一来我们这个装载宇宙就算是完成了,哎,这是咱们这个用户维度表每日装载的第一种思路,当然这是只是第一种。那其实在这。
24:09
那我们还有另外一种方式,另外一种方式怎么做呢?就是用它跟它不去做join呢,去做什么呢?做union其实也行啊,这个union怎么实现,那现在我先不说,咱们先把这个join的方方法先给它搞定完之后再说那个union怎么做啊,来视频我先给它停一下。呃,来吧,各位同学,那现在呢,我们来看一下这个最终的装载宇宙到底怎样去做啊,OK,那首先我们先把这个data gra给它打开啊,那按照我们刚才的这个装载逻辑,咱需要先干啥?先得把这两部分数据时候得拿到,对不对?OK,那咱现在就去拿一下,首先我们select一下啊,Select from哪要from维度表的是不是9999分区对吧?哎,DD等于209999啊9999,然后杠12杠三幺好,那先把这个分区拿到,拿到之后呢,里边所有的字段咱们都给它拿出来,少个九是吗?啊,9999好,那现在所有的字段全部拿出来,这边还是我快速的处理一下啊。
25:05
CTRLCTRLVCTRLF,搜一个逗号啊,中文的逗号啊,来走,拿过来,那DT字段咱就不要了,我们只要这些字段啊,CTRLC拿过来之后呢,放在这个位置好了,那现在我们所需要的这个,呃,拉链表当中的九九,九九分区的数据是不是相当于就已经拿到了,没问题吧?好,拿到之后我们继续往下进行,下边我们拿第二部分,第二部分从哪拿来着,是不是应该是从ods层的那个用户表的实物二分区里边去拿对吧?来,我们s SE select from ods下边跟一个谁诶,跟一个user in对吧?拿哪个分区是在拿我们当天15号的这个分啊,对吧?哎,但是大家要知道啊,就是这张表我们做的是增量同步,他从第二天开始做的就是什么,就是基于blog的那个同步了,对吧?也就是说,我们从这张表当中拿到的就是。从这个分区拿的就是就是一个一个的音色的操作和update的操作了,对吧,是这个道理吧,好了,那完了之后呢,我们应该怎样去获取我们想要的这个新增级变化的状态。
26:08
对,咱们点过来对不对,你第二天之后拿到的数据应该是这样的一些数据啊,对吧,里会有什么,里边会有type ts data o,对不对,那么这个type呢,咱们主要的类型就是什么类型啊,从第二天开始就是iner的类型和update的类型啊对不对,OK,好,那在这儿我怎样去拿到我们想要的用户的状态呢?对不对,因为我们要拿的是什么,是6月15号的新增级变化的状态,对不对,哎,那这个怎么去找。嗯,怎么去找,首先那咱们分析分析啊,Date里边有没有咱们想要的状态。有吧,所谓的状态不就是这个人的各种属性信息拼接而成,就是最终的一个状态嘛,对吧,所以说我们主要应该是从date里边拿,对吧,但是这个date呢,它其实在不同的类型下边是有不同的含义的,没问题吧,如果我现在这个类型是一个音色的类型,那我这个date对应的就是啥。
27:02
是不是就是你插入的数据对吧?意思就是你插入的数据对吧?那OK,那你想一想,对于我们的那张用户表而言,我插入一条数据就意味着什么,是不是新增了一个用户啊,对吧?OK,那所以说那对于insert类型的这个date而言,这个date里边放的就是什么,是不是就是一个新增的状态,这个没有问题吧,对不对?OK,那接下来继续往到,那如果这个类型是update类型呢?Update类型就意味着我表里边是不是有一个用户的信息,它发生了变化,是这个道理吧?好,那对于update类型的这个数据而言,Date里边存放的是什么?是修改后的数据,对吧?那是不是也是一个新的状态,是有道理吧?那所以说不管这个类型是insert还是update,对不对?那所以说date里面放的都是我们想要的这个新状态吧,没问题吧,所以说在这儿呢,咱们就不用去管那么多了,我们直接拿什么就行,直接拿date里面的一个一个字段,是不是就是我们拿到的一个一个的新状态,没问题吧?所以说在这儿呢,咱们就直接从里边拿,那就完事了啊好,那接下来呢,我们再回到刚才的位置,我们需要从这里边那个date字段里边去获取我们所需要的每一个状态,OK,那在这呢,我们就快速的处理一下就行了,是不是从这拿就就OK了呀,对吧?来往下走往下走,往下走走走走,我们找到这应该是来一个date点,是不是就OK了,对吧?好,那完了之后CTRLC拿过来之后呢,我们给它放在这个位置,CTRL好,那现在呢,咱们就给它放在这儿了,当然这里边你放过来之后,肯定有些东西你是拿不出来的啊来咱们查一下,但说。
28:25
听到不说还是那个开始日期结束日期啊尾吧,好,但是大家都知道啊,你说我今天15号的新增及变化的数据,它的开始日期结束日期肯定都是少,开始日期是不是肯定都是那个呃九九呃这个22020。2020杠零六杠幺几幺五嘛,15号的新增级变化,对吧?所以这个没问题啊好,那接下来我们继续往下走,下面呢,我们这儿结束期应该是9999,然后呢,这个杠12杠是三幺啊对吧?啊就是这点咱就给它删除就行了,好了,那这部分数据咱们就已经是不是拿到了,对吧?OK,那现在呢,我们直接回车,好,当然这个数据是拿不着的,因为我们现在没12的数据嘛,对吧,这个理解一下啊,好,但是大家要知道啊,你说我们现在拿的这个数据能不能直接用呢。
29:08
不能直接用,为什么不能直接用?因为咱们前面讲过,由于我们的增量同步是基于blo的,这里边我们会拿到每个人的是不是那个中间状态啊,对不对?假如说一个人我今天变了好几次,那我里边是不是正常会都有好几个update的操作呀,对吧?我这时候把所有的updated的操作都给他拿过来了,对吧?中间状态咱们是拿过来了,但是我们中南我们说不需要啊,对吧?所以咱现在需要去做一个过滤,对不对,我们得保证,哎,就是我们这个circle最终写完之后,你知道只留下什么,只留下每一个人的最新的那一个状态,对吧?好,怎样去做这个过滤。怎样能拿到每一个人的最后一个状态,嗯,怎样能拿?嗯,这个12代N代,我们其实在这儿呢,暂时可以先不写啊这个,呃,因为我们还需要再做一个过滤嘛,对吧,咱们过滤完之后我再加这个是不是也不迟啊,对吧?OK,那咱们先给它去掉啊,怎样能拿到每个人的最后一个状态,你要知道就是咱们当前拿到这个数据是什么状,什么样的啊,但应是这样的,可能有的人我现在是不是只有一个状态,有的人呢,我可能有俩状态,有的人可能有仨状态,对吧?我需要保证这里边只留下每个人的最后一个状态,对不对?哎,这是咱们现在要做的工作。
30:25
葛如拜分组,格格按谁分组呢?按ID分组,然后呢,然后。这个开窗分组,开窗分组确实能保证我这个结果就是呃,每行数就是一个用户对吧,但是你这些值咋去啊,你要知道你分组之后只能写什么,只能分组之外还有聚合函数来吧,对吧,你聚合函你得用聚合函数是不是找到这个人的最后一个状态,哪个聚合函数能帮你找到他最后状态呢。
31:01
三求和时间最小,那那怎么去怎么去用聚合函数,找到时间最小的,你那个聚合函数用谁先说用哪个聚合函数。因为你分组之后是不是只能用聚合函数,还有你这个就是你分组的字段呀,对吧,那用max max里边写谁呢?Max op time max time max这个不合适吧。对不对,所以分组聚合不合适啊,啊,这个其实大家可能没有意识到是一个什么类型的问题,这实际上是一个非常典型的问题,一个什么典型的问题呢?分组套的问题。啊,大家在学汉语的时候应该接触过这个概念吧,对吧?这其实有一个非常典型的分组泡文呀,对不对,为什么?你想一想,就是我们现在面临的数据是什么情况啊,是每个用户可能有若干个状态对不对?用户可能有若干状态,就假如这一号用户,这是二号用户,这是他的多个状态啊好,那83号用户可能只有一个状态,对不对?OK,那完之后我们现在要拿的是什么?是每个用户的是不是最后一个状态,没问题吧?OK,那现在是不是就相当于我每个用户是不是作为一个分组对不对?一个组下边有多个状态,然后呢,你需要取这一个组里边的最新的一个状态吧,这不就是分组淘N吗?
32:16
对不对,那分组套N我用三后怎么实现呀,它是有固定的套路吧,对不对,怎么实现来着,是不是就是rank开窗加V尔过滤啊,是有道理吧,这不就是分组套N嘛,对不对?好,那接下来呢,咱们就来看一看这个分组套N咱们怎么实现,就大家现在应该能意识到一个问题,就是分组套N的问题,你要说的是分组套N,那那我会,但是你要不告诉我这是分子套文,那我就不会是吧,就是大家得得得敏感一点啊,你就看到你就知道他什么类型的问题啊OK,那接下来咱继续啊进行分子套班,那这个解决方案就很明确了,咱首先需要干啥?先加rank开窗对不对?好,那完之后呢,我们来一个这个rank,那当然这个rank的话呢,呃,排,也就是一个这个加这个排名的一个函数来吧,咱们应该是有三种,哪哪三种来着,Rank rank,还有number,那个这三个函数有什么区别来着,咱们既然讲了,都回忆一下rank rank number。
33:07
啊,什么时候才会有区别吧,是不是得有那种并列的时候才会有区别啊对吧,假设我这有一个并列第一,那你要用rank加,那就是啥一一级三哎一三啊,那如呢112对吧?那row number呢?哎,123,这个number大家一般情况下是记不错的对吧?就是含二嘛,对吧?那关键这个rank跟den可能会记混,他俩怎么记啊,这个很好记,Den denity是什么意思?Denity什么意思?密度的意思,密集的意思,对吧?那这个是不是就是更加密集的排名啊对吧,112它是连着的,没有跳对吧?那么之后这个rank就是稀疏的排名呗,113对吧,就这个意思啊,这个理解一下好了,同学,那截止到现在这三个函数咱们就回关了,那咱这用谁呢?大家用是其实咱们这儿呢,用哎RA就可以啊,因为什么你要知道一会儿你排序,你要什么排序。你按照什么排序,是不是可能按照时间排序,哪个时间。
34:03
这个表里边按照哪个时间排序。我按TS排序行不行,TS代表的是什么时间来是咱们这个操作的变动时间对不对,比如说iner时间或者update时,那是不是就是一个状态的时间呀,对不对,那所以我们按TSTS,咱们是不是就时间桩上对吧,就在这儿,我TS大概率上应该是不会怎么样了。不会重复的对不对,哎,不会重复的,既然不会重复,那所以说你经常用run road number,还有是不是都一样啊,对吧?所以在这咱们用runnk就行,好接下来我们就下头rank后边是不是得有or or里边得有分区和排序吧,对吧,我们加一个part败拜谁。拜谁?其实拜那个date.id是不是就完事了,对不对,那OK,我们O拜谁应该拜TS对吧?好,那这个TS大家注意观察,我们应该用升序还是降序,应该用降序吧,为啥你要拿的是他的什么最新状态,最新状态是不是就是那个时间串最大的那个呀,对吧,对不对?那所以说在这儿呢,我们应该用降序,然后一会儿呢,是不是找到一个排名为第一的就行了,对不对,那所以在这呢,我们应该是降序来一个DSC啊啊完到这儿我们来一个啥。
35:03
呃,随便起个别名,比如叫RK就完事了,好了,那现在它加上了之后怎么做呢?剩下的讲的是不是只剩下一个过滤了对不对,OK,那在这我们CTRLX给它放一个括号里CTRLV,那这个呢,放过来往前推一把,这个我们起名为T,然后下边呢,来一个SSEREC啊,然后呢,辅装一下这个T1,那下边我们要做的工作就简单的只需要做一个简单的过滤就行,对吧?RK等于一是不是搞定了对吧?这个其实不难啊,行了,那这个完成之后我们继续往上走,上面呢,咱们是不是需要把我们所需的这些字段都给它选择出来啊,对吧?好,那完了之后我们快速的去选一下,呃,这个字段呢,我这儿已经摆在这儿了,大家要注意啊。呃,我这回再选的话呢,就不要再带着那个date点了。为什么给大家解释一下啊,实际上是这么一个原因,大家注意观察,我这儿是不是写了一个子查询对吧?这个子查询虽然我们现在去查的话呢,它是没有数据的啊呃,这个呃,RK加加开窗,它需要走,那个需要走计算引擎,我暂时先给它注掉啊呃,咱们先现在让他快速的走一下来,我们把这个拿过来走,你注意观察,你看我们这个东西查完之后,每一个字段的字段名现在叫什么,还带那个data点吗?就不带了,是不就叫ID login name nickna嘛,对吧?那所以在这呢,我们去查这个相关字段的时候,那咱们就直接就是查这个字段名就行了,就不用再带着那个,呃呃那个那个DT点了啊,这个一定要注意一下,好,那接下来咱们继续往上走,所以上面呢,我们就得这么去选,那当然呢,这里边我们需要有一些工作去做啊,首先第一个就是这个脱敏,你每天的新增级变化,是不是也要脱敏,没问题吧,这块一定得注意,OK,那在这呢,咱们给它脱个敏来,CTRLC在这儿呢,我来一个MD5给它放进去name啊完之后呢,是phone number,这个咱们得快速的做一下啊,MD5诶,拿过来,好,那这个email呢,咱们也要去做一个这样的脱敏。
36:45
做F第五,然后呢,CTRLV好了,那现在呢,这个脱敏做完了,然后下边是不是得加上这个开始和结束日期啊对吧?这个是不是还是加咱们刚才所说的那个22020杠零六杠幺几幺,哎五,然后呢,截止日期就是9999就完事了,诶9999,然后杠12杠三幺,这个没啥问题吧,好了,接下来咱们就呃又又少更久啊好了,接下来咱们继续往下走,那到目前为止呢,我们这个15号的新增级变化是不是就算是已经拿到了呀,对吧?那接下来咱要干啥?按照我们刚才的这个规划,我们是不是需要把这两部分数据给它做一个全外联,然后呢,给他用with s提前声明出来呀,对不对,OK,那现在咱们把这一步给他去做一下,呃,首先我们既然要做这个全外联,需要先温给他们俩分别干啥?是先分别起一个别名啊,对吧,那这个我给它往下走,那这个管它叫什么呢?呃,这个由于是我们拉链表当中是不是9999分区的数据是前一天的全量最新对吧?那在这儿呢,我就管它叫做old啊,OK,那这个是不是咱们今天拿过来的新增级变化呀,对吧。
37:45
那这个呢,我就管它叫做哎,New啊,一个新的一个旧的啊来这个呢,往前走,这个呢,咱们管它叫new OK,好,那完之后就可以用这个old跟new做全外联了,对吧?来我们来一个副al draw对吧?那这个副照跟副out这没区别,大家应该知道吧,呃,一个简,一个简写一个全称对吧?啊,这个都都可以用,都行啊,现在往下走,下边咱们需要干啥?需要给咱们俩写一个连接条件对吧,应该是old点那前面那个叫什么叫UID还是IDID是吧?那old.id等于new.id是不是就完事了?OK,好,那它俩现在就照上,照上之后我们需要干啥呢?把里边是不是所有的字段咱们都得给它选择出来对吧?OK,那在这呢,我们SE select一下,然后呢,From OK,大家注意啊,你在select它俩的这个照唤结果的时候,你必须得保证什么是不是左边的字段跟右边字段都得选出来才行,对吧,因为你看啊,我们拿全量最新的时候,是不是一部分拿的是左边的,一部分拿的是右边的,对吧?所以这两两部分字段咱都得选的才行,好了,那现在选的时候。
38:45
你就需要注意一个问题了,你注意观察是不是左边这个子查询的ID跟我右边这个子查询这个ID是不是对应的,对不对,那左边这个字段跟这个字段是不是也是对应的,也就是左右这个字段是不是完全对应对吧?那既然是完全对应,那我选完这个字段之后,咱就得记得干啥。
39:02
你得干啥,你得起别名吧,对吧,比如说我在选第一个ID的时候,比如说我先选old.id那完了之后,我后边就得起一个,比如说old下面ID对吧,那你要取new的ID的之后呢,你后边就得干啥,起一个new下下ID,为什么一定要起这个别名呢?你想啊,将来咱是不是得从这个job的结果里边去选一部分,我得拿old的,一部分拿new的对吧?那如果我这不起别名,那他俩的字的名其实都叫什么,都叫ID,那这样一来说就有起了,对吧,所以这块一定得起别名啊,这个呢,我就不再一个一句写了,我们直接把文档当中的这个最终的这个S语句给它拿出来就行了啊来把它拿过来,CTRLC。放到一个位置来,大家看一下啊,这就是我们这把所有字段都拿出来的一个结果就长这样。好,这个应该能看懂吧,这是从old里边获取到了我们所需的所有字段,这是从new里边获取到的所需的这个old跟new上下字段是完全对应的,应该能看到对吧?好了,这个我们就不再一个说了,啊行了,那拿到之后我们现在要干啥?是不是得把这个say select之后的结果是不是得用VS给他提前声明一下,对吧?所以在这儿呢,我们往下拉,往下拉找到这个位置,CTRLX,那在这呢,我们给它起一个这个呃边名叫做V,为什么咱就叫tmp吧,就是一个临时表对吧S,然后呢,往往往下走,这个括号我们写下边啊走来放括号里,那之后呢,把咱们刚刚所写的那个大个的子查询给它放在里边,CTRLV,好,那现在往前走,往前走往下走,到这对往前推行了,那截止到现在这个tmp紫查询是不是就声明好了对吧?声明好之后我们相当于完成了到了哪一步了啊,是不是相当于完成到了咱们这个图当中的这一步了,已经拿到这个虚拟表了,对吧?接下来咱是不是就可以分别从里边拿全的最新和过期数据了,对不对,好,那接下来咱们就开始拿了啊,看看这块怎么做来,我们直接在下边。
40:48
填写就行对吧,我们一部分把来先拿那个全料最新就是select from from谁tmp呗,对不对,Tmp啊OK好,那之后呢,我们需要加外管理条件,拿全球最新用不用。
41:00
不用加入和条件,你得拿全量嘛,对吧,这个已经说过了啊好,那现在咱们就开始拿这个字段了,来吧,分析分析吧,我怎样拿,我才能拿到我们这个全量的字段,咱们第一个算是什么?最新的字,第一个算是ID对吧,这个ID你说你怎么拿。ID怎么的,你是拿左边的还是拿右边的ID?左边的,你光拿左边其实也不行,你拿左边D不可能这俩人拿的是空啊,对吧,OK,那你应该怎么。你得判断一下吧,应该是怎样一个逻辑来着,是不是这边要是空,我就拿左边的呗,对不对,这边不为空,我就拿右边的呗,是不是该这样一个逻辑,对吧?所以说ID,那拿的话,咱们就这么写if一下,If啥呢?If应该是右边那个男叫new,对吧,就是new ID is now为空,那就怎么办拿,是不是左边的这个ID呀,对吧,否则呢,否则我就拿右边的ID,哎,是不是应该是这样的一个逻辑,没问题吧,好,接下来继续往下,我们是不是该拿第二一个字段了,第二段是什么?是name字段,对吧?这个name你也得怎么拿,你也得判断一下,对吧,你只拿old呢,那肯定不对,你只拿new的,它也不对,对吧,说不还是那个原则,哎,拗为空拿old,拗不为空难用,对吧?应该是这样的一个逻辑啊,好,所以在这呢,咱们来一个是不是if啊,对吧,If也是new name is now,呃,但是当然这个咱们这么拿就不太合适了啊呃,为什么不太合适呢?咱们这应该都用谁判断啊,你应该都用ID去判断这个比较合适,为什么你得考虑这样一个。
42:28
什么情况呢?你说有没有可能我今天这个人,我状态发生变化,我就是要把我的某个信息改成空。对吧,你比如说我原来我这儿呢,是有一个这个呃,电话号码的,我现在我就要把电话号码我给它去掉,对吧,有一个邮箱,我就是要把邮箱给解绑,有这种可能性吧,对不对?那所以说这种情况你要是用用它去做这个not的判断就不太合适了,我应该用ID去做判断,这个是比较准确的啊,完了,所以在这呢,咱们应该都用ID判断,也是new的ID is no对吧,那完之后we,那我就怎么办呢?我就取还是old呗,Old应该是name吧,对吧,否则我就取new是不是name嘛,对吧,那我其余的字段,你说是不是都是这么去写就完事了,对不对,就是保持这个规律,行了,这个我就不带一点写了啊来,我们直接把文档当中的这一小部分给它拿过来,往下走,往下走,哎,其实就是哪呢,就是这。
43:19
哎,就这CTRLC来拿过来,大家可能会看到我好像是少拿了一个字段对吧?但其实我并没有少拿啊,那期是多出来的一个,你看啊,我们这其实已经从ID拿到了哪了,是不是开始日期结止日期,这已经是我们全部字段了对吧?好,至于多出来一个字段干什么用的,一会儿我再解释啊好了,那截止到现在,我是不是就已经拿到了咱们所谓的全量最新了对吧?这部分数据对应的就是咱们图当中的是不是这一小块啊对吧?诶,好,拿到了,拿到之后是不是剩下就只有这个,呃,过期量对吧?过期怎么拿这个其实很简单,来,我把这个先注掉啊,然后咱们一会再给它放开来拿过期的数据是不是就是select,然后呢,From from哪tmp呗,对吧,是不是重复利用它呀,对吧?好,那接下来往下走,后边怎么办?这回要不要过滤,得过滤一下对吧?应该是过滤new ID is not now对不对?还得按一下OLDID是不是is not now,对吧?两边都不能为空,是不是才能对应到我们这两行数据啊,对吧?这两行数据我们要拿它的过期状态拿哪边了是不是?
44:20
把左边的O里边的字段就行了,对不对,这个不用判断了,直接拿O就完事了,OK啊好,那所以在这呢,我就不再一点写了,我们直接拿一下文档当中的这个最终的结果来,CTRLC我先拿到这儿吧,CTRLC好完之后呢,放在这儿好了,那现在呢,我们这个字段该拿的基本上都拿过来了,现在还差一个字段啊,差谁。那这是到那个start代的时候,还有一个摁的这对吧,我摁的这个为啥没直接拿啊,是因为摁的这咱得处理一下吧,对吧,这个不再是最新状态了,我应该给他改行,是不是前一天日期对吧?那前一天日期是哪一天呢?是14号来吧,怎样获取14号日期。对吧,你要知道今天是15对吧?啊,那也我我我我我这儿呢,就是尽量保证我这个S课里边只出现一个当天的日期,为什么?因为将来咱们需要把这个词儿不怎么样放在脚本里面,是不是统一用那个do date去替换所有日期啊,对吧?所以在这你尽量不要有太多日期,对不对,我应该用15号的日期,是不是得到14号的日期啊对吧?怎么得到减一对吧?那怎样对日期减一呢?怎样呢?给大家介绍一个函数,叫做data a或者是data sub,这都行,一个加一个减,这俩函数怎么用啊,首先它接收两个参数,第一个参数是一个日期,第二个参数是一个int值,哎,相当于用日期减一个天数,对吧?就这个意思啊好,那在这儿呢,我是不是应该是把2020杠零六杠,呃这个幺几呃幺五给他对不对,然后后边再放一个几一就行了,当然呢,我这能不能再写一个减一呢?能你写减一就相当于是啥加一啊是这样的,所以其实艾和S这两函数有一个就告诉他行了,那这样一来我就拿到了前一天日期了,行了,那截止到现在我们这个过期数据是不也。
45:54
已经拿到了,对吧?都拿到之后,按照我们刚才的这个说法,我们应该怎么做来着,你看啊,这俩select,因为我想用一个in来给它插入,所以我在这里加一个啥,是不是得加一个union对吧?UNION2种,一个是union,一个是union奥对吧,一个去虫,一个不去虫,谁去虫谁不去虫,Union去虫奥是不去虫的,对吧,奥是所有所有是不是不管你重复复重复都要啊对吧,哎,就都要对吧,这是呃,UN尼奥好了,完之后我们继续来到下边,咱们怎么做呢。
46:22
已经UN用到一起了,对不对啊,大家大家熟悉不熟悉这个union的语法呀,你要知道union连接的是什么来着,是select的查询对吧?那多个union连接在一起之后,你就把它当做一个select去处理就完事了,能理解吧?OK啊好,那理论上我是不是一个select加上一个in inside的呀,对吧?所以在这我是不是直接在这个位置给它来一个in色的就行,对不对?那我们in色什么,是不是也是in色right对吧?In色right后边加一个table table加谁?Di user这一块后边呢,是不是得写分区,现在关键问题来了,分区怎么写对吧,我这这个分区怎么写。
47:00
对吧,你要知道这其实最终要写往两个分区啊,这一部分是不是都写到996分区,这部分是不是都写到那个过期十字二分区,对不对,好,那这怎么写。哎,这时候就没法用这种写法了啊,在这呢,我们只能使用另外一种插入数据的方式,叫做动态分区啊,OK,那与动态分区相对应的就是啥静态分区,那咱现在这种写法其实就是静态分区,你是不是指定了一个分区,我下面所有数据都写了分区,对吧?这叫静态,那如果我在这儿呢,只指定一个分区字段,而不指定具体的分区字段的只那这种写法,那就叫什么呢?就叫动态分区,好,那这个动态分区它的原理是什么呢?那其实很简单,所以动态分区呢,就是说OK,我在这儿不给你指定具体的分区了,好,那你不指定分区,你说我下边这一行一行的数据,它最终会去往哪个分区呢?诶,它是动态的,是动态的是由于是由你这个数据自身的特点去决定你将来会进到哪个分区的,啊是这样的,这叫动态分区嘛,对不对,OK,好,那由我这个数据的自身的什么特点去决定这个数据进到哪个分区的,是由每是由每条数据多出来的最后那一个字段决定的,是这样,也就是说你要想用动态分区,那你就要怎么样呢?啊要多选一个字段,你看我们这儿本来字段是不是已经选购了呀,对吧?诶完了之后我要想用的分区,我需要再多选一个字段,你多选出来这个字段的值是多少,那我这一行数据将来就会写,写到DT等于多少的这个分区当中,哎,就这个意思啊好了,那所以在这咱是不是得多选一个字段才行,好,那现在我们先来看一下上面这部分,你说这部分咱们写一个什么字段就行。
48:41
哎,很简单,你要知道这是不是就是全量最新,全量最新是不是都写往999,所以在这儿呢,我能不能直接给他写一个常量值12杠三幺,我这么写行不行。可不可以完全没问题,我这儿用不用起别名,不起也行,起也可以,为什么?因为大家要知道动态分区他去找这个分区段的值的时候,是根据字段名找的吗?不是,它是根据位置找的,对吧?是不是就是最后一个字段呀,对吧?哎,是这样,所以你那只只要有个值就行好了,那这个完成之后,我们继续往下走,下边这儿是不是咱也得给它加上一个啥也得给它加上一个这个动态分区段的值吧,对吧?OK,那这一部分咱们需要去往哪呢?这一部分去往哪?哎,这一部分其实是不是就是写到是15号吗?14号吧,对吧,写的写的14号分区啊,OK,那所以说是不是就是上面这个就完事了,对吧?哎,CTRL,可咱把它拿拿下来是不是就完事了?OK,那其实截止到现在呢,那咱们这基本上就算完成了,诶但是这里边还有一个小细节,大家需要去注意一下,哪儿呢?就是我们现在去跑的话呢,这个circle肯定是有问题的,肯定是有问题的,哪儿有问题的就是你在union的时候,你他会报一个错误,什么错误呢?说你上下的数据不匹。
49:51
Hey。哪不匹配呢?你们要知道union它是有要求的,要求什么来着,我上下两个查询他们的字段的个数以及字段的类型都得完全对应才行,对吧?那咱这个数应该是没问题的,但是类型有问题,哪个类型有问题啊?
50:08
就是最后这个字段的类型有问题,大家知道date这个函数,它就是data sum或者data这个函数,它返回的结果是什么类型,是date类型,而我们上面这写的是什么类型,哎,是字符串类型,那所以上下类型是违违配的啊,所以在这呢,你最终你需要怎么做呢?需要做一个转换,你把下边的这个诶,呃,这个date类型转成什么就行呢?字符串就可以了,OK,那这个怎么转呀?这里边我们会用到一个啥,会用到一个什么函数,Costs的函数吧,还记得吧,这应该有一个costs是专门用来做类型转换的呀,对吧?这个函数怎么用,是不是需要先把我们的值放进去,然后呢,Cost它怎么样,是不是as一个类型就行了,对吧?咱这应该什么类型,是不是应该是死这类型对吧?OK,那这样一来我们其实才得到了最终的咱们那个所谓的是不是N,是不是data对吧?诶这个才得到最终的N贝塔,好,那接下来继续往下进行,那下边呢,这个是不是其实也要做一个强转对吧?所以在这咱们把它给它CTRLC给它复制一下拿过来,好CTRLV,那这个呢,其实是作为咱们将来那个动态分区的那个字段,对吧?它俩稍微的区分一下啊,这个是字段里边的,呃,这个表里边的真正一个字段,这个是我们用来做动态分区的一个字段啊,这个搞清楚就行了,好这个同学,那截止到现在我们这张表的数据装载语句才算是真正的写完了啊OK啊,这个其实你可以应该能体会到啊,就是这个circle跟我们这张图是不是应该是高度对应的呀,对吧?那所以大家呢,诶,你可以怎么做,你就把这个图给它理解了。
51:31
理解完之后呢,你要想练一下这个circle,就不要看着文档去练了,就按照自己的理解去把这个circle写一写,尤其是circle基础比较差的同学啊,好了,那这个circle写完之后,咱们测一下,看能不能跑通,那当然我们跑半年他肯定是没数据的,肯定是没数据的,对吧?啊,但是在这儿呢,我们跑一下,如果他不报错,证明咱们逻辑是没问题的就行啊好,那现在呢,我们把这个表先得建出来,来把这个表给它建一下,建完之后呢,我们再回到刚才的这个三考上来,那现在呢,我们,呃,就是咱们选出这个三克怎么选,尤其是这种就是行数比较多的circle,你怎么选呢?你直接用鼠标点它一下就行,在这个circle里边任意位置点一下就行,然后呢,你按CTRL按回车,它就会自动的帮我们去提供几个选项,默认的就是这个最小范围就是这个S,然后呢,直接回车诶就行了,诶但是他报错了对吧?诶他报了一个啥错呀。
52:20
什么dynamic partition strict mode是requires at least one partition column啥意思?动态分区的严格模式需要至少一个静态分区的字段对吧?那完之后你要想来关闭这个呃严格模式你需要怎么办呢?是不是设置它为一个非严格模式啊对吧?也就是说我们需要是把这个参数给它赛一下对吧?大家还记不记得这个所谓的动态分局的严格模式和非严格模式,还记得吗?也忘了对吧?啊,也忘了啊呃,那这边呢,咱们时间言呃,我就暂时先不给大家解释了啊呃,我们下午上第一节课的时候,我来了之后,我就给家解释这个动态分区的严格模式和非严格模式的事儿啊呃,完之后大家就记住了,就我们现在用对量分区,咱是不是得加一个这样的参数,这个参数大家应该之前见过吧,在学汉文应该见过吧,好吧,行,那到时候下午我再帮大家回忆他干什么用的啊行,视频我给他停一下。
我来说两句