00:00
这个穿过函数应该对大家来说是比较头疼的一个内容了,是吧?理解起来稍微费点劲啊,费点劲,其实首先你要把握的是它这个窗口啊,你首先一定要心中一定要有一个点,就是这个窗口,它是针对于每一行数据来说的,就是每一行数据,你要查看它的一个窗口的生成规则,然后你比对这一行数据,就是这个数据它会在他自己的一个窗口里边吧。哎,每一行数据有一个窗口,而不是说这个窗口形成了,假如说你旁金BY一个内,哎,它只形成了。假如那面有四个,它只形成了四个窗口,不是的,你要看具体有多少行数据,有多少行数据它就有多少个窗口。多少个窗口啊,这也就说我们为什么能将这个sum这个函数啊,哎,能跟之前的那些数据就是select新,然后加一个so这种语法能过,你之前是不是不能过,你想想看,你之前如果不加O函数的话。
01:05
它是不是因为你有很多字段没有放在勾BY里边,你一定要放在勾里边啊,是这种,所以说你要是你想想看,每一行都有一个窗口的话。他不是说你,你想想为什么你谁来的心这样?你在select。心,然后丧啊一个什么内容吗?然后FROM1张表,T表,这样这个语法是过不去的是吧?是因为啊,你这个东西sum出来的一个东西啊,它只有一条是不是啊,但是这个心呢,是有N条,它匹配不上啊,匹配不上,所以说当我们这个函窗口函数啊,指的是每一行都有一个自己的窗口的时候,它是不是就是你N行数据对应的N个窗口啊,它每一行数据都有自己的窗口,所以哎,这个语法是能过的啊,是能过去的啊,首先你要明白这一点,第二就是这个窗口的一个大小问题。
02:10
啊,我们刚开始研究的就是一个over吧,不加任何内容,还记得第一个需求吗?求四月份总顾客数对吧?这个窗口指的是什么?就是全量的一个数据吧。是go by以后的一个数据,Go by以后它是不是形成了只有我们当时他购买,购买的顾客只有两个人嘛,Go by以后它只有两个,因为只分成了两个组,所以这个O它窗口的大小就是二,那你靠的新的时候,那么就可不是二嘛啊这窗口的一个大小,然后后面我们他这句话说这个数据窗口的大小会随着行变化而变化,是因为我们在这个窗口里边。限定了它某些大小吧。这个大小你看啊,首先有这种当前行。
03:00
那既然有当前行这种限定窗口大小的话,那你每一行肯定是不一样的,对吧,当前行肯定是不一样的,后面还有往前多少行,往后多少行。啊,这都是会跟着整体就相当于这样,你的数据啊,是一个表在这儿,但是它这个窗口其实拿了一个框框在这是吧,第一条数据一个框框在这,然后第二条数据呢,它可能框框在这,哎,它这个窗口是不断的移动的,就相当于在一个什么,呃,就类似于什么呢,之前就那个秤是吧,秤上有那个什么什么。秤砣还是什么东西,就就这种移,移来移去的,就这种感觉吧,哎,他这随着这个。游标是吧,这个叫叫叫游标是吧?啊就类似于这种东西啊,就类似于这种东西,就是诶这个游标可以在这个整体的数据当中啊,这游标就相当于一个窗口啊,相当于一个窗口,它是可以移动的,因为你要主体的这条数据在变的话,哎,它这个窗口也在变啊,也在变的是这个意思,它这个表示的是这个意思,那既然他能达到这个需求的话,那就帮能帮我们做很多数据的一个分析,是不是啊啊做很多数据的一个分析,就类似于我们要累加。
04:17
按时间进行累加。他的一个cost啊,昨天我们做过了,那你只要在窗口里把凹拜一下,对吧,凹一下或者说说一下都是可以的。啊,都可以完成具体的需求。他就是昨天我们我们来看一下。光嘴说。嗨,我们取一下我们那个。服务指定一个具体的一个窗口,然后。From某一张表吧,From那个business。那这样查出来最后的结果是什么样的?
05:04
是这个地方我们记分区了吧,也就是说他先整理的数据是这样的,然后一块一块的,哎,按照姓名分了几个区。啊,几个区,这个区就限定了你最终的那个游标卡尺的一个移动范围吧。你游标卡尺如果你不分区的话,那个游像我们所说的那个游标卡尺,它是在整个全局上移动的,对吧,但你分区其实限定这个窗口移动的范围,是这个意思吧?啊,你只能在区内来移动啊,后面那个order。就限定的是什么窗口的大小吧,窗口的大小。Obi限定的是窗口的大小,不是吗?排序是排序啊,排序的过程它不是限定了窗口的大小吗?你看第一条数据的窗口是自己。
06:01
第二条数据就是两条,第三条是三个,昨天没注意到这个问题吗?Auto,它是排序规则,它同时也能限定窗口的大小。不是,你如果说有同学说分区这个是吧,那你不分区的话,那最终是什么样的啊。是一号五号八号,然后还有不是一号二号在这。你不分区的,我我们讲的分区它是限定什么。你这个窗口不是移动吗?你如果不分区的话,它是从第一个一直移动到最后一个,你分区的话,它只能移动到这儿,它限定的这个移动的范围的分区,限定的是移动的范围。能看明白这个问题吗?分区partition或者distribute也好,它是限定这个。我们用游标卡尺来举例子,什么游标卡尺移动的范围,它不能超出这个范围的,因为你的分区的到姓名,也就是说你只能在同一个心拟内来移动这个窗口。
07:11
移动窗口,但是这个auto啊,它是不是限定了窗口的大小啊。第一条的时候,因为你欧是按照默认的升序,升序排的时候,因为第一条数据来的时候,它只有自己,因为他并不能看到比他大的数据,哎,所以他一个窗口只有自己。第二条来的时候他是按顺序的吧,所以比他小的数据已经存在了,已经存在这个窗口里面了,他是这样来的。是这样的啊,所以说这个排序规则限定的是。窗口的大小,然后。爬地上是限定了这个窗口的。应该叫终极范围吧。是吧?能看明白这个问题吗?想一想,稍微想一想,一定要理解这个问题啊。
08:01
看咱们现在是加了一个分区是吧。那我们不加这个分区。我们这有啊。拿一下昨天的一个数据对吧。汉斯克二来看一下。按照日期进行累加,So了。这个是月购买总额。都排了序是吧,有没有。啊,排了序就对了是吧,那我们把这个拿过来。看到C放到这个地方,我们把这个这个范围先。干掉了,就是不分区,哎,仅仅是排序,我们看一下啊,你对比一下,你看一下啊,看一下这个分区和排序分别做了一个什么事,然后等会我们再测一个什么单独只分区不排序,你看一下三个对比的看一下你就能明白这个分区和排序分别限定的是这个窗口的什么。
09:05
内容啊,什么内容。然后我们把这个粘出来啊。放到那个里边对比着看。这个是这个里面用的分区排序都用了吧,啊都用了。哎,这个把它过来。这个我们刚才用的是什么,仅仅是排序是不是啊,仅仅是排序,然后接下来我们看一个仅仅是分区的。你在这拿一下语句啊,呃,或者是山都行是吧。这个语句吧,把这个法律申办,然后按照姓名进行什么。分区啊,然后这个呢,我们就不要。不要的来了,你把三个搁一块看一下,你要理解那个分区和白序分别限定的窗内容。
10:12
首先我们看一下目前这个啊,这个是分区排序,这个是仅仅是排序的,你看就是第二个比第一个少的什么。分区吧,对吧,刚才我们所讲的,哎,分区其实限定的是什么。窗口的最终大小,哎,它能够窗口往外移动,移动到哪?哎是由这个分区限定的,你是按内分区的,那窗口它只能在相同的内里边来移动这个窗口,来移动这个窗口啊,第二个指的是什么?没有帕西山脉吧。是不是没有爬梯声带啊,也就是说你没有限定窗口的移动范围,那就是它在整个数据当中移动吧,那你看一下这个数据。从这开始一直到最后,是不是都能找通道啊?
11:03
哎,他精神拜是限定的这个窗口。它的一个界限问题,就相当于界限问题啊,然后你看一下这个。这是最终的什么?这是只是。分区没有排序的是吧,你把这个拿过来。这个是分区。分区你看一下分区它是不是窗口就是一个区啊,因为你没有用排序来限定窗口的大小啊。你没有限定他单独一个窗口吧。那你们要先定窗口的大小,其实就跟我们单独使用一个什么O。你单独使用一个O啊,它是不是全量数据啊,但你分区了是限定了这个窗口的界限,就是界限限定了就是一个区里边所有数据。
12:01
一个区里面所有数据就这个同一个名字,哎,他把数据全部做一块累加做了加做了加做了下一个区里边的啊,然后这个你看一下单独的old by,它指的是窗口在不断的往上延伸,不断的往上延伸。啊,限定了这个窗口的大小,啊,限定了窗口的大小。啊,限定的窗口移动的大小,然后分区限定的是窗口的边界吧,窗口的边界,所以说你要把这种东西隔一贯对比着一看,哎,瞬间就能清楚了啊,瞬间就能清楚了,好之后就是累加,然后我们所讲的还有几个函数啊,然后这个这个什么边界,其实也是限定他什么窗口移动的吧。怎么移动的是不是啊,怎么移动的这个大小的,然后后面是这两个向前多少行,向后多少行,我们讲了一个在实际开发当中,因为应用场景啊,它更多的是计算什么页面之间的一个跳转问题。
13:06
他首先要知道是从什么页面跳转到。支付页面最多啊,他要分析这个页面好在哪。还有一个问题就是这个电商网站啊,他进来了之后,有首先肯定要登录进来,他要分析什么,从哪个页面跳出的,就是总总有一个页面是离开我这个电商网站的吧。啊,肯定是这样的啊,那他要分析的是哎,最后就是最后啊,退出的一个个,退出的一个是什么形式的,最终你吓一跳为闹是不是就退出了呀,不在我这个电商网站里边了。对吧,下一跳为那那他要分析哎是哪一个页面跳到那了。他要分析这个到底是这个页面是大家不受欢迎啊,还是做的不友好,还是上面的内容有什么问题啊,他就一眼就能看出来,他他知道哪个页面跳出率最高啊,分析跳出率,分析转化率都要通过这种这两个函数来啊,前一跳是谁,后一跳是谁。
14:07
啊,后一条是谁啊,之后讲的还有一个NT尔法,NT2就是它将所有的一个数据啊,分到了不同的组里面。分到了不同的组里边。然后它本身的一个返回值先来看,其实啊,这些个函数对应于代码当中都是一个方法啊,是不是它都是一个方法啊,都是具体的方法,你想想它底层的不是走的都是Java代码吗。它对应的都是一个方法,那这个方法的返回值是,那就是这个函数最终算出来的结果吧,算出来结果是这个意思。那它的一个反馈值,其实就是它这个反馈值是每一行都有一个自己的数据吧,啊,它是每一行对应,哎,你分成了几个组。然后我这一行是在哪个组里边,它返回的是那个组号啊,是这个内容。
15:06
分化组里面这个就是有助于你分析,就让我们分析的是什么。前20%时间的一个订单,前20%时间的一个订单。啊,那你分析其他的一个数据,或者说前40%啊,等等,那你的一个NT啊,最后小于等于二就可以了吧,小于等于二就40%,但是你要注意的一个点就是这里面它要为int类型。啊为因的类型啊,这你要注意就行了,还有就是这块呃,O函数啊。注意的点就是。他这里来看。这种写法也就是说啊。它这个over是在一个select的语句里面,是可以有多个窗口的吧。可以有多个,一个里边可以有多个窗口的,而且他是每一个窗口呢,前面必须有个聚函数,这个窗就是这两个是在一块的。
16:04
这两个东西,这两个就是这个聚合函数啊,和这个O啊是连在一块用的,而且就聚合函数这个后面这个O啊,仅对。他前面那个就要函数成效,它不会影响后面的数据啊,能懂这意思吧,啊能懂啊,那这块还是要多练一练,把这些内容一定要练熟了。
我来说两句