00:00
好,那还是把前天所讲的东西做一个回顾啊,那么我们开始是从这个窗口函数这啊应该是行转列列转行吧,对吧,前面两个比较简单啊,就说一个contact,一个contact with拼接字符串的,还有一个呢是connect set,它呢是一个聚合函数。对吧,可以将我们一个列呢去合到一起,放到一个数组里边,当然我们同时还看到了还有一个list对吧?两个人的区别呢,一个去重,一个不去重,就跟条化当中是一样的对吧?呃,之后呢,是所谓的列转行啊,其实呢,就是说将一行数据转化成多行,也就是说我们之前所说的三类函数当中的udt啊,叫战列函数对吧?啊,当然我们也可以自定自定义啊,X explore对吧?嗯,那如果说这个字段呢,我们想要跟原表的字段进行关联,那么我们还要给它加一个什么let view啊,让它形成自己的一个侧写表啊,所谓的侧写表呢,就是说跟原表呢有关联,如果说如果你不加侧切侧写,那你直接用的话。
01:10
它就类似于如果当然当然我们当时看到他直接就不给用,对吧,语法就过不去,那我们当时也推测就是如果说他真的给用的话,那其实形成的还是第二级,就是把原表数据四条跟这个12条对吧,如果能用,那是不是应该它每一个都要去匹配上啊,这就不对了,对吧?啊就本身就用不了,因为一边四条,一边12条嘛,那根本就用不了啊啊这是我们所说的一个UGT啊函数,那其实更重要的是这个窗口函数,或者叫开窗函数,这个是功能比较强大的,因为有很多我们想要做的是这个一般在什么时候用呢?我第一我们需要这个。原原始数据,第二又需要什么?聚合之后的结果,就是说我们需要这种数据的时候,往往你就要想到用开窗,因为聚合函数啊,我们要一个聚合结果,那是不是要用勾派进行分析,那勾派出来的结果是不是多条数据出一条啊对吧?聚合函数嘛,那我们又要跟原始数据进行关联。
02:23
而原始数据可能之前是十条,你聚合之后可能变两条,这就形成了十跟二的一个对比,对吧,所以说它是放不到一块的,就跟刚才我们说的,你不加侧写表xlo的直接跟原表的字段放在一起不行,因为它字段数据行数就怎么样了,就不一样了,对吧?那为什么O可以呢?开窗户的数据,为什么我们这个地方的开窗,或者所谓的这个窗口函数,它就能够实现刚才我们所说的把明细数据和聚合数据放在一行呢?为什么它有一个本质?
03:00
它跟group,当然他们俩都是分组对吧?它们俩有什么核心的区别呢?就在于窗口函数,它是每一条数据怎么样都有一个自己的窗口。所以这也说明了一个问题啊,就是说它每个数据单独进行开窗,特别是我们做写了partition bed加一个all out的时候,就是里边用的排序,它说开窗从第一行开到当前行的,就是每一条数据开的窗口都不一样大,对吧?这没问题吧?那我前面做sum是不是每一个每一行的数据最后算出来结果都不一样?对吧,那其实这也说明了一个问题啊,就公司当中他会有一个规定,如果这个需求可以不用窗口函数解决的时候,那么就不要用。因为公司当中会有这个规定,大家想一想,能不能想明白刚才结果刚才所说的为什么公司会做这样的规定。
04:02
假如说啊,你用勾。和over这个需求都能够完成,那公司一定会让你用go,让你用over。就结合刚才我们所聊的那些来想一想为什么?它效率要比勾要低一些。这能想明白了,因为刚才我们说的go be,假如说十条数据,我形成两条,那最后这两条数据对吧,我计算的时候,呃,可能五条,五条分成两组,诶五条是不是计算一次,我窗口是不是也能达到这种效果,我只要按照这个字段分区帕败这个字段,最后是前面五条数据一样的,后面五条数据一样的,但是它计算的怎么样,总共计算十次对吧,不计算两次,因为它每一每一个每一行数据呢,都是独立计算的,都是独立计算的,就是因为它可能每一个每一行数据的窗口呢,可能是不一样大的,它只能分开计算。
05:06
它放在一起计算,大家结果一定一样,那肯定不行对吧,就类似于做雷达的那种效果。但是虽然我们说的它效率比较低,但是有很多事情你是go完成不了的,对吧,就类似于刚才说的,你要把明细数据跟聚合后的数据放在一起,那你go back做不到这个事,对吧?所以我们只能去干什么。用窗口函数对吧,用窗口函数类似于分组套。当然你不用窗口函数其实也能做,但是很麻烦啊,超级麻烦,那还不如用那个,呃,窗口函数呢,这个大家要知道一下,它的效率相对来说比较低一些,因为它给每一行数据呢,都独立开了一个窗口,都是独立计算的,所以公司当中会一般会有这样的一个规定啊,能不用over就不要用over,当然有很多在面试过程当中,如果你能想出来over,把这个问题解决了,那就那也就行了,对吧?面试当中你不要想那么多了啊,当然他问到你句话的时候,再去想一想其他的一些方案,对吧?好,那接下来呢,是在窗口函数当中我们所要去写的一些东西。
06:12
啊,就限定窗口大小的这些东西对吧?啊主要是到这啊全多了的到这到这个位置,当然里边还有个东西没写,就是so跟part跟这个什么out对吧?啊其实在这个窗口函数当中啊,我们经常用的是这种对不对,Select。行,嗯,假如说from business。这张表这是康德新,然后呢,我们加一个这个O啊,我们用的比较多的是不是这个所谓的partition对吧,假如说name啊,然后all对这个是所谓的all data对吧,我们是一般是这样去用的啊,其实在我们之前所所讲的过程当中啊,其实还有一种第区别的派,是不是也是分区。
07:06
对吧,啊,那给大家说一下这里面呢,用也可以也可以啊。当然这是两套啊,就是你用part的时候,假如说你还要结合着排序来用,你就必须用,如果分区用的是ribu版,那就只能用so。就之前我们就聊过什么,他们俩用的对吧?啊是这意思啊,等会我们可以来看一下,好,这是这样的一个结果,呃,那我们试一下这个东西,我们用帕呢去结合着说直接干什么报错。直接报错对吧,那我们刚才说了,因为它是两套相当于是匹配的关系,对吧?啊,这个地方呢,我们可以用第三吹裂的呗,哎,这个能好起来对吧?啊,当然你用disri by跟auto的时候,你也可以去试一下啊,就是说这两套你记下,而且呢,这两套在用的时候是没有什么差别的。
08:05
没有差别的啊,这习惯上用的更多的还是party,就是就是一个习惯问题啊,就是一个习惯问题啊,所以当时这个就当时在大家学的时候没跟大家提了,人家就练差不了,对吧,跟大家去说一下这个事啊,知道一下啊,别到时候看到人家写的,诶怎么你写的ribu,我写的是其实一样的啊,当然让他两套你结合着叉开用它不行对吧,直接报错了啊,是两套,这个要记一下就好了,Part呢,跟这个auTo By啊,然后disri by呢,跟这个so by啊,它是两套是一样的,没有什么区别啊行,这是我们关于这个窗口函数,当然在窗口函数前面呢,我们更多的放的是一些聚合函数,呃,Count some me max avg等等的这些的聚合函数,当然前面可以放那个,呃,Connect set connect list,因为connect set跟connect list它是不是也是聚合函数啊。
09:03
对吧,啊,就放在一个这个所谓的数组里边,好,那除了我们所说的具有函数之外,它自己还有一些特殊的,你比如说这。它是往前第几行对吧?啊,就给当前行看一看,往前第几行,把数据移到当前行。对吧,然后还有立着往后取多少行的数据放在当前啊,然后还有一个NT,它是将数据呢进行一个分组对吧,做分组处理,同时还有后面我们所聊的RA这个东西啊呃,那同说我用rank对吧,假如说我叫这个,那all the data,然后RA啊。这个business。
10:04
然后呢,All by这个所谓的name加这个all data,哦,错了,他说什么东西啊,看他说对于我们rank这个函数来说,缺少了包子句对吧?啊,缺少包词句,这就是我们之说的啊,就是说它是一些特殊的函数,但是你不能直接拿出来用的,所以我们当时把这个啊,就是里边的leg呀,Lead呀,还有NT啊呀啊加这个rank是同时讲的,要跟over去连用的啊,要跟over去连用的啊,你单独用用不了的,对吧?啊,你想取一下这个所谓的什么减减离,这个是不行的啊,它用不了的啊,只能跟over去连用啊,嗯,这些东西都可以去测一测,没有over呢,它用不了,呃,那之后呢,是我们聊的一些其他的函数。对吧?啊,那里面东西呢,都是一些简单的内容啊,去练一练,知道一下,因为所有函数太多了,我们只是说列出来相对来说比较常用的,其实那里边也有一些还不是那么常用的一些函数,那你要是289个函数,那就更多了,那后面呢,我们还说了这个自定义的函数,自定义函数对吧?嗯,自定义的一个udf呢,它比较简单,它就主要写一个方法,就中间的这个方法处理这一行数据BG移出最后这塔的范围就行了,那这还有个UTF环节,对啊,那当时我们留了一个相当于一个小作业是吧,有完成吗?有去有去自己尝试去写一写吗?是这个。
11:43
就这个东西转化成他自己写一写吗?写了吗?没写,就是说我们当时说的将它炸裂成这个样子,对吧,我知道大家炸裂成这个样子都会,那无非就是按两个。
12:02
用两个分割符去切一下,然后呢去返回用去写出对吧,那这种就炸成这种。这样可以。这两列呢,大家想啊,我们当时在自定义这个函数的时候,整个它的一个返回值是什么类型啊。A release,而我们之前炸出来只有一个类的时候,当时我们o list里面是不是就放着一条数据啊,你放一条它就相当于是什么一个列,那也就是说我们现在希望它炸出来什么两个列对吧?那其实就是说你按照这个冒号分割开。先按冒号分割开,它是不是分成两个元素啊,对吧,那就便利这两个元素写出去两次forward调用一次,它就写出一行数据,For每调用一次,它就写出去一行数据,能懂意思对吧?那我们现在要把前面按逗号分开的,是不是写到一行里面,那就是说便利的时候,我们按逗号分开,把它加到集合当中,再把它加到集合当中干什么写出去。
13:15
啊,其实就那样好了,它就形成了两个列啊,它就形成两个列是这样的一个效果好,因为它的一个整个的UDTF呢,是可以形成这个多个列的啊。
我来说两句