00:00
好,那我们应该是从这个查询对吧?啊,整个的查询这块,而且呢,前面是一些简单的,那我们应该是从这个昨天从这个join啊,这七种join你肯定要会的啊,肯定要会的,你也可以去看一下啊,就是在MYSMY斯克其实高版本八版本之后啊,呃,是有这个里边的for啊,全连接的,其实在老版本当中它是没有。那你想一想,如果没有for join,那我想获取全量的数据集,以及中间那一块镂空的那个数据集,应该怎么去获取?对吧,就是左右两边特有的啊,还有三个一二,我们当时不说了,它有1233个位置嘛,对吧,这是123,那如果说没有全外连接,你就想一想123这三个怎么获取,以及1313倒还好,是吧,一三的话我们是不是可以拼对吧?用那拼起来啊拼起来,因为他没有for的话,咱们用or那种方式就不行了嘛,对吧,那我们可以用一拼上三嘛,用unit or去拼一下是不是可以对吧?啊这个一三的好解决,那你可以想一想,哎,123又怎么解决呢?
01:20
对吧?啊,123又怎么解决它,当然我们如果说有for照的话,那其实直接用for照就好了,他自己就全都有了,对吧?啊是这样的,但是呢,在老版本的买色Q当中没有啊,经常还会去考这块的东西啊,你要去想想这块东西怎么去写啊,呃,那就是说七种照应之后呢,还有多表连接,其实跟那个两个表连接没什么区别,你再来一个表之后呢,无非就是说再多一个。Join啊,对吧,再多一套好,那之后呢,是聊的笛卡尔级,其实在后面呢,我们是要配置一个参数把笛卡尔级给它限制掉的,其实现在我们执行笛卡尔级是可以的呀,对吧?啊是因为那个参数呢是false啊,如果说直为处之后呢,就不允许使用笛卡尔级了,在生长环境当中那个属性肯定是。
02:09
处的啊,肯定是不让你用的啊,肯定不让你用的,姐,你万一啊,假如说大家想一个问题,万一我就是这个需求,就非得用笛卡耳机不可,那怎么办?先把两个表抽出来,然后再。就是在公司当中,有时候之前就有个学生遇到这样的问题啊,他的一个需求呢,就非得用抵抗二级不可,而公司当中又是干什么干什么关掉的,其实这种时候你要灵活变通啊,就在你的搜狗前面把那个属性改一下,临时生效一下。能懂这意思吧,啊就临时生效,就是我们今天说的,你杠一杠F后面是不是可以跟多个色配啊,对吧,包括你set这个一个什么参数,它也是一条语句啊,你用分号隔开就好了,能听懂这个意思,就临时打开一下啊,要灵活,因为你的需求,呃是非得用第二级,而且你判断了这个第二级,未来这个数据量呢,也不是很大,那就用一下也无所谓,对吧?啊主要是他公司当中直接计掉这个第二级,就防止有的有的人在写的复杂的搜索当中,直接就带了第二集,然后呢,数据量爆炸,直接就把什么集群干崩斗对吧,任务跑不了,然后集群那边资源全部被你占用了,最后还是失败啊,你整个的公司当中,整个的集群又不是你一个人在用,对吧,有有很多人在用的,这时候就就有的学生说他总进到公司当中,整个集情就慢了,等他离开公司之后,集群就好了,对吧,就是因为你写的这种奇奇怪怪的S在里面运行啊。
03:46
就拖慢了整个因为你占用资源的啊,所以说大公司对这块管理的比较好一点,大公司的话,咱们都知道在MR当中,对于雅安来说,是不是可以配置那个什么容量,容量策略,然后公平策略,就是调度器那块,对吧?啊,它不是这两种都是多队列的对吧?啊大公司呢,是这样子啊,就是说你进到公司之后,给你独立分配一个队列,你以后的任务把这个队列里边,你就是这个队列给你分配好了,内存CPU这些东西可以分配好了,你能玩的也就这些资源,就不会影响到什么其他人啊,不会影响到其他人,如果说你只有一个队列,或者说只有两三个队列,对吧?啊,虽然你要想想要提高整个的变异度,说有这个用容量调度器,用这个三个队列,四个队列啊,但是这三四个队列呢,是大家共用的。
04:36
那这个时候你去跟其他人就会互相的有影响,对吧?啊,所以大公司呢,进去之后呢,他会给你分配一个独立的队列啊,这种其实方式比较好一点啊,特别对于新人,他就防止你你写的SQ,呃,对公司的整个机器产生影响,但未来你时间太久了,可能慢慢的这种就会越来越少,对吧?呃,那这是我们所聊的第二级,其实在生长环境当中,除了这个之外啊,还有就是我们聊的奥奥这个东西啊,就是说你直接想用的话,其实也是禁掉的,也是禁掉的,你没办法说一个表我S什么东西,然后呢,让一张表,然后out一个字段,这个语句也是过不了的,也是过不去的,因为主要的原因就在于什么,他只有一个,只有一个radior啊,把所有的数据放到一一个radio里边去排序,占用的内存太高了,而且执行速度怎么样?
05:35
很慢,本来我数据量大,如果说我有多个reduce的话,那可以干什么?进行对并行去执行对吧,你现在只有一个,你只能串行一个来,而且呢是在一个里边占用的内存也很大,因为你要做排序啊,对吧,你不是说把这个数据变一个什么格式,加一个什么一啊,假如前面一个单词你加个一,这个还好一点,这个也占不了多少内存,我加载一点我就写磁盘了,对吧,但是你要排序啊啊,你要整个的做排序啊,是这样的一个情况啊,那大家想一下啊,就是说我现在呢,就必须得做这个。
06:15
全局排序,或者说假如说我要求一个top n。我要求全局的前十名有什么优化方案啊,当然用一个肯定可以,对吧,想一想MR这边怎么优化对吧?啊,从MR这边思考一下。求淘宝N。我按照一个字段排序,我要求前十名,就假如说工资对吧,呃,我员工呢,可能有很多人啊,特别特别多,数据量特别大,然后呢,我就要按照这个薪资排序,就前十名。
07:07
有同学想到了,我们可以自定义分区,认分区,类似于这种是吧?啊,然后去做,还有一个就是你在MR当中,不最后的案例当中不也体现了吗?在map当中你不是要取前十吗?对吧?那我在map里边每一个map。我就取前十。想起来了吗?你们写过的MR的一个任务对吧?里面用的是什么数据结构啊?吹map吧,去排序啊,在map里边最终的结果就是说来一条数据,我把它放到哪啊,吹map里边把你要排序的字段放在K的位置,对吧,按照顺序去排的,最后在那个clean方法里边对数据做一个输出,对吧?Map方法里边不做输出,最后呢,我只保留十个判断,如果超过十个,我就把最小的那个给人干什么移除。
08:13
知道这种思路吗?假如说我们确定了求TOP10啊,确定了求TOP10的时候,对吧,我完全可以在map里边求前十名,然后把所有的,假如说我有十个map,最后也就100条数据进到一个里面去排序吧,对吧?啊就是当中呢,因为map它肯定是必行的,对吧,每个map里面里面呢,我只要前十名的啊这种方式啊呃,那后面我们可以去聊啊这个事情,嗯,那对于have当中呢,也有办法做到这个事情,假如说求前十,就是说如果说你用了out,你加入了limit这个关键字啊,它就是那样做的,就像我们刚才说的,它在map里边呢,每一个map求前十名,那这样的话到数据量是不是大大降下降,而且呢,Map那个可能讲,那我十个map,我能不能每个map求最大的值。
09:08
我刚好不十个吗?这个不行对吧,你能保证说前十名刚好就是每一个里边有一个吗?不可能,我最极限的情况下,前十名是不是可能来自于同一个脉呀,对吧?啊,来自于同一个麦啊,就这样东西,所以呢,你每一个脉都要输出什么前十个对吧?啊防止那个数据呢,在最大的几个数据,在一个map里边,这是全局排序啊,这个东西呢,在生产环境当中,如果说你想直接用的话,也是近照的,到时候我能看到在优化那里边,我们会讲到的啊,一个第二级一个autob,呃,这个呢是我们所聊的S,它是区内排序对吧,它是区内排序,而且呢,往往是跟着我们的什么区派同时使用的,区派呢,是负责分区的。
10:00
那solid派呢,是负责排序的对吧?两个字段如果两个字在相同的时候,那我们可以用克拉斯派代替,但是呢,它不能指定D,它只能按照声序,对吧?而我们使用这个distribu跟so的时候,是不是说DA可以啊,当然要演示对吧?啊,DC也是可以的啊,行,这是我们所聊的这四个百,之后呢是我们所讲的分区表和分同表,那这里边毋庸置疑我们之前所说的分区表是最为重要的。那现在想一想分区表他实际上干了什么事。他是将本来。属于一张表的数据呢,我现在要放在不同的目录当中去做存储的,每一个分区实际上就是一个目录,对吧?每一个分区实际上就是一个目录。那我而且分区我们可以看作它呢,是这张表的一个字段啊,一个非常普通的字段对吧,但是他又有一点特殊,特殊在哪啊,这个子段的特殊性是个他跟其他的字段的区别在哪一个文件中一个上对一个呢,是在文件里边,就是说普通的字段是不是放在文件里边了,它的值对吧,放在文件里边了,而对于分区字段,这个值是放在哪的,放在目录或者换句话说,其实它放在买S的原数据里的。
11:45
对吧,那所以说我们如果说通过will子句里边有了分区字段的过滤条件。那我们在真正找到HDFS目录的时候,一般都是先走原数据嘛,先定位数据嘛,我走到原数据的时候,是不是就定位到具体的目录了,就避免了做什么全秒扫描。
12:09
对吧,就避免了做全面扫描,我只需要扫我需要的这几个分区的目录就好了,啊是这样的一种情况,所以呢,它也是一种相当于优化方案阿零分总表而言呢,数据拆分,它是将数据同一个目录当中数据按照我们所要求的规律拆分成多个文件。就是说我们是不是在建分钟表的时候,指定了一个什么,按照ID进行。分桶,然后还指定了分几个桶之后,他在导数据的时候,它是不是会根据我们ID的什么哈希值摩以这个桶的数量,然后来选择放到哪一个文件里边,对吧?啊也就是说是这样的一个情况,它呢是将更大的一个数据量呢,做一个细度的划分啊,当然我们之前说了生生产环境当中其实用的相对说比较少一些啊,说下其大的时候才会用啊,因为其实分区表基本上够用了,就算分区表不够用,其实我们分区表还有二级分区,三级分区都可以啊,我可以再往下细分,对吧,我不需要非得去分什么文件,我拿分区表就能够将我们非常大的一个数据集呢进行一个分开,而在生产环境当中,一般按天分其实就够了啊,其实就够了,按小时啊,或者说甚至按分钟这种就极少了啊,因为按分钟的话,你就大量的产生小文件啊,其实数据量达不到那么大,对吧,一分钟的一个数据量啊啊,当然你如果说双11那天晚。
13:43
那这是有可能的,对吧,平时的时候你说那一分钟里边能有多少数据啊,比较少对吧,这是我们所说的分区表和分工表,后面呢,是一些函数,那其实内置的函数,当时我们看到了它还蛮多的图像,呃,269个,还259个。
14:00
19吧,我记得反正是200多,而九个是吧,222级九。我记得259还是269。反正挺多的,这里边,那也就是说我们不可能在课堂上把所有的函数都怎么样都去讲到啊,289的还是蛮多的,对吧?啊,这一块的东西呢,不可能说所有东西我们都能够去讲到,但是呢,我们会讲一些说相对来说比较常用的,那如果说你要用这些函数的时候,你肯定去,呃百度搜一搜,类似于有这种,有没有这种功能,对吧?啊,如果说没有这些功能的话,那其实我们还有后面自定义,我们可以自己写啊,假如说你没有这个功能对吧,我们可以自己写写代码的方式来实现啊这个事情啊,当然了,如果说你要想看一个函数怎么用这对吧,DC方式啊,然后呢,Extended。
15:00
可以查看,不仅介绍用法,还有什么例,还有例子对吧,但是注意啊,不是所有的,其实我不是所有的都有例子啊,有的还是他没有举例子,所以一般我们用它是够了,因为你英语水平,其实嗯,这个肯定能看得懂,因为他会把那个函数,然后括号几个参数是不是给你写了。然后会告诉你return对吧?啊返回什么东西,那这这些东西应该基本的能看得懂啊,那后面我们聊了一个什么空值,然后呢,一个case文and,然后同时呢,我们做了一个if的一个扩展,对吧?那有同学可能就问了,哎,之前我们说了这个kiss分啊,可以说多个分支,If这个函数是不是只有两个分支,那这个东西怎么写的对吧,其实这样的,呃,重复的代码在哪块啊这个。如果说我除了男女还有其他的,那我们就这样加,能懂这意思,就多个分支,哎,呃,Kiss sex性别当是男的时候,一,对吧,或者说说哎,当A的时候,我可能给个什么?二,哎,当这个什么你这个姿态等于B的时候,我可能给成什么?三,类似于这样的,它是多个分支,最后默认值用的是什么?Else对吧,默认值用的else,然后M结尾。
16:24
And结尾啊,是这样的,这是多个分支的一个写法,因为我们当时只有男女两个性别嘛,所以说用不上刚才我们所提到的什么多个分支,对吧?啊多个分支这个要注意一下多个分支的写法,就是说我们把问。这个语句重复写就好了啊,其他的case一个字段不用重复,Else and不用重复对吧,它是相当于默认值,这个不相当于大家那学的那个在加法当中学的那个叫什么?对sweet case对吧?啊,类似于这种写法啊,最后这个相当于是不是default。
17:08
默认值对吧?Else就所有的哎,都不满足的时候,那我们给一个默认值啊,大家都走这个了啊,前面条件都写好,只不过说前面呢,我们只有这一个对吧?啊就两个分支啊,那所以说呢,上面只有两个分支的写法,咱们是不是用if来代替啊啊,因为if刚好就是两个分支,If第一个参数呢,它是要一个波尔类型的表达式,第二个参数是第一个参数返回V数的时候取得值,然后这个就是返回false取的值对吧?好,这是我们昨天所讲的一些内容啊。
我来说两句