00:00
好,那同样的我们还是把昨天的东西快速的做一个回顾啊,呃,我们是从这个数据类型开始聊的,对吧?呃,那前面的基本数据类型其实没什么好聊的,主要就是当时给大家提了一下,说这里面浪类型呢,是big in的,需要我们额外的去关注一下其他的基本数据类型是不是跟Java一样的,对吧?所以你就不需要去记了,那你就跟Java当中一样,那你就记Java就好了,对吧?呃,那就对于这个集合数据类型而言。集合数据类型当中,我们要注意一下,假如说一张表用到了多个集合的数据类型,那么他们集合元素与元素之间的分隔符只能在这表语句当中是指定一次的。对吧,也就是统一去指定的,这个也就是要求我们在往这个集合包含集合的那种数据类型的表里边放数据的时候,放文件的时候,你在放之前就要把这个文件干什么,格式化好就要格式化好,就要让我们你用的数组啊,Map呀,这些个集合类型当中的元素与元素之间分隔符得保持一致,对吧,必须得一样,因为它在建表的时候呢,它是统一指定的,就昨天我们聊的它叫connection items,他们那的BY,对吧,它并没有说叫array items,也没有说map items,所以它是统一指令的,当我们既用到map又用到OA的时候呢,那我们必须要将这两个数据结构的中间的分隔符要统一啊,一定要统一啊,这个是也就前面你需要做一个所谓的叫ETL。
01:48
ETL只是数据清洗吗?这不三个单词吗?抽取加载和转换对吧?啊,其实清洗只是一条当中很小的一部分啊,很小的一部分对吧,包括我们所说的那个叫什么,呃,脱敏。
02:10
数据的脱敏听过吗?没有,那你那你就算没听过,你就听看这个词大概也能知道什么意思啊对,就类似于有一些数据当中会携带人的身份证号啊,手机号啊,像这种数据我们最后呈现的时候,一般中间要加什么星是吧,137什么星星星星,然后1234这样的啊,就不能把真正的数据给暴露出来,这个就叫做托敏,那这个也是属于E条L当中的。或者说所谓的转换啊,其他的后面呢,我们还要慢慢去聊,清洗只是ETL当中的一个很小很小的部分啊,不是etr不等于清洗啊,清洗是属于ETL的,这个要注意一下,那我们刚才说了,你把分割符去替换一下,它也属于这个ETL数据的转换嘛,对吧?刚才说了提取加载转换啊这样的东西啊,好,这是一定要注意的一个点啊,其他东西呢,说那界标语句当中,像这个connection items啊,By map啊,我需不需要去记呢?这些东西不需要,但是你需要把这个东西整理到自己的文档里边了,对吧?哎,用到复杂结构的时候,如何定义这个表结构,那脑子里边有这个东西就行了,脑子里边有这个东西指的什么意思呢?我知道我的笔记上写着怎么用,但是你让我写,我可能不会写,做到这种程度就够了啊,这种程度就够了,所以每一个知识点掌握。
03:39
程度可能不一样的,那整个汉当中呢,就是要最掌握的就是那个so的一个书写,昨天胡老师应该给大家又发了100道题是吧,抽时间去做一做啊,如果说遇到比较难的,搞不定的,你可以找胡老师或者找我都都没有问题啊,咱们一块去解决一下这个事情啊,去写一写啊写一写,然后呢,你可能之前可能拿那个MY色去写,对吧,现在写到have之后,你可以把数据导到have里边来了,自己造一些数据啊,或者说那个题当中有的也提供了一些数据,你拿have去瞧一瞧,因为在整个have当中啊,He口这个东西的书写是最重要的。
04:21
是最重要的一块,然后就是我们的,呃,第几章,第十章还是第几章。第十章,诶第十章的一个优化调优,这两个是最重要的,一个是笔试,一个是面试,笔试就是让你写测考,但是面试当中也有可能让你写这个circle考啊,就看着你写,写完之后呢,再问一句,你还能不能对这个S考再进行一次优化,就你刚写完的东西又让你优化,就这种的啊,他有可能就这样子的,但是绝大部分的面话,你写出来就行了啊,就写是最重要的,然后是优化,但是面试当中有些题还是蛮变态的,说实话挺恶心的,有种题啊,当我们看到包括大家这个地方不有一个那个课后练习吗?今天的课讲完之后,基本上啊,我预估的啊,今天课讲完之后,大家这个练习题就可以做了啊,最晚的时候呢,大家可以在这个周四的时候把这个课后练习,这里面呢,就给了我觉得应该给的不多,三道题,好像是对吧,三道题。
05:26
三道题,然后这个地方有个文件夹万金符,是当时我造的一些数据啊,其实原题当中数据不是那样子,如果说原按原题那个造数据我找太多了,所以把数据精简了一下,主要是哪呢?这啊,这东西还熟吗?搜索数是17900吧,我记得。一万七千九啊,然后沙柳是一万九吧,还是一万九千七啊,然后这个什么张泽树14600吧,这个胡杨好像是最贵的是吧?啊好像挺多的,21500什么的啊,就好几万这种的,呃,我就把数据给他弄少了,如果说几万的话,我这个数据没法做,这个东西还记得吗?
06:11
这是用户不是胶水啊,是你点那个圆圈收的那个低碳排放量啊,收的那个量啊,就是说它是一个用户的一个流水表啊,流水表就看你的流水够不够领这些数,所以我为什么把那个1万呀这些东西给他降低了,如果说还是按照一万多,那我这个数据造太多了,你想想看,你一次收的才多少,一百一百二这种的话,对吧,那一万多,那这个我要造很多数据,我就没造那么多数据了啊,造少一点,其实那个不影响,对吧,跟那个数据量其实没什么关系,一万七千九还是还是17还是19,是不是没关系,你搜都写出来,肯定跟他这个数字没关系吧,对吧?这就是蚂蚁金服当时一道题啊,是呃,当时是我觉得是深圳的一个。学生完了之后呢,是他在面试当中遇到,遇到之后就就就就发给我了,我给他做的,然后我觉得这题挺有意思的,就给他加到这个课程里边了,反正就是就从那个之后,每个班都会去讲一下啊,到时候大家也可以提前去做一下,感受一下这种题,这大公司出出来题还挺有意思的,挺好玩的这个题啊啊,而且呢,很符合他的一个业务场景。
07:22
对吧?啊,蚂蚁森林这一块啊,那这道这道题的难度呢,还是比较大的,前面两个题还好,就是刚才我们看到课后练习有三道题嘛,今天我们的课讲完之后大家就可以去做了,但是我估计今天晚上也不太有时间,因为今天有几个函数的话,呃,需要大家下去要去整理,要去总结的啊,像难度比之前的要高一些了啊,不像之前的come sum这些东西呢,不用过多的解释,对吧,今天所学的函数当中呢,就会有一定的难度啊,今天晚上呢,可能以这个练为主啊,明天学完之后呢,后天花时间呢,可以把这个题去做一做,然后周五的时候我们抽个时间,诶把这题呢,呃,可以问一问大家做的怎么样,然后呢抽时间去讲一讲,如果大家都没做完,我可以往后放一放啊,可以往后放一放,然后呢,抽后面的时间去给大家去讲一讲,尽量的最好大家周四不管你能不能做出来,去看一看,去想一想,思考一下,花一点时间思考一下,因为如果说其他有同学说我做了,然后有几个同学说我没做文,我。
08:22
但是都没看,那我这个肯定是不会等的,对吧,不能因为你一个人或者两个人说你没看,我就直接拖着就不讲了,那后面再讲我肯定就直接讲,因为大家刚看完肯定印象会更深一些,拖着反而不好,对吧?嗯,那就大家哪怕你做不出来,你去看一看,你自己思考了,你再去听的时候,吸收效果是不一样的。所以为什么要一直要强调学习过程当中要预习这个事儿,因为预习之后你肯定有很多问题,你带着问题去听课是不一样的。你你没有预习,完全听直接听的话,完全就是真的是硬塞给你们所有的知识,完全是灌下去的,不是你们主动在接收,是被动的,所以说要预习啊,但是其实呃,在这边培训的话,其实每天的任务量还是蛮大的啊,所以说预习这个事儿吧,不是说所有人都能做得到,这个我们也清楚啊,也清楚,所以说我们也就提一下预习这个事儿,有能力同学还是要去预习啊,不是说所有人,我们也不强调说每个人你必须晚上你两点三点不睡,对吧,你给我预习不可能,这个不可能,因为每天的任务量确实比较大,我们也知道。
09:29
行,那后面是我们讲的这个DDLDDL这一块呢,我们刚才说了,主要就是哪个创建表这块,你要去额外的去多练一练,里边的搜去敲一敲,对吧?啊,多敲一敲,其他的东西你去粘一粘,或者说照着敲一敲,这个都无所谓,因为它确实不那么重要。啊,因为创建一个数据库create database就好了,对吧,那大不了我们顶多再加一个location,指定一下它的位置信息,不会有其他的操作了,那什么修改数据库,那更就不可能的,你改没事改它干嘛呀,对吧?包括删除公司当中一个库里边几十张几十张表,对吧?你你怎么可能会删他呢?就不可能这种事就不会发生,对吧?那包括表修改删除这种情况,删除还还正常一点吧,有时候我们建的内部表是临时表吧,我们可能会删一下啊,但是修改表的操作几乎都很少啊,都很少,如果你真的要想加速段或者说什么样子的话,在生长环境当中,更多的我们采用的是重建一张表的方式,这张表就这样了,我们新建一张表,你要不要加两个字段嘛,对吧,新建一张表去加两个字段,而且大家发现到现在我们虽然讲了它可以加字段,但是你有没。
10:51
发现它叫字段,其实只能在后面叫,你能在中间去加一个什么字段吗?加不了的,加不了的对吧,以前是什么样就是什么样的,所以刚才我们提到在过程当中,如果真的要加字段的话,往往我们是新建一张表,而不用原来的表去改啊,所以改这种操作呢,也很少去用,也很少去用,所以我们当时在讲课的时候就说了,就创建第四章,你主要优先肯定把握的就4.5节。
11:19
创建表对吧,创建表的语法啊,Create table啊,当然中间前面可能在中间还有一个一个关键字对吧,然后if not exist之后呢,表明,然后跟上这个列的信息对吧?啊,当时应该还有那个中间的他的他的一个解释注释。之后还有哪些啊?用过的没用过的都想一想。啊,存储路径有,但是它偏后了对吧?啊放在基本上可以说放在最后了。还有哪些东西啊,想一想。
12:03
用过的,没用过的,你只要记得的,你都可以去说一说。有算题的分区啊,Partition by对吧?啊part by,哎,给个字段分区啊,当然我们现在还没用啊,只是现在能说出来,只是可能就哎当时提的有一点印象啊,但是我们没用对吧?还有一个既然提到分区表,我们对应的还有一个叫分同表吧,啊叫分同表啊,它呢是class的呗,啊跟一个字段对吧,是这样的东西。还有什么东西啊?排序对吧,分图表里边排序,然后into几张几个桶对吧,这是分图表一套的啊啊,然后呢,是存储的格式,文件格式,你到底是TSD格式还是什么其他的格式对吧?啊,其他的格式,然后还有roleat limited,什么files terminated by,嗯,然后那个connection term by map case term by line。
13:04
他们那的派这四个派对吧,四个分割符,就是说呃,字段分隔符,集合元素的分隔符,然后kv map kv之间的分隔符,以及行分隔符,其实行分隔符一般我们很少指定,就默认的就是杠N,就是按行读完了航墨就是杠N对吧,读完之后呢,它就自动去换行的啊,也不需要我们去指定什么行分隔符啊,这是四个分隔符都是属于role format limited的底下所配置的东西,因为若符号limit,它本来就叫行的格式的一个什么限制,对吧?然后底下定义的四个分隔符,那这次接下来呢,就是大家所提到的location啊这个关键字了,对吧,指定位置最后还有一个见表的时候可以同时导入数据的方式,它既是建表语句,也是导入数据语句。As select这种方式对吧?啊,最后呢,是as select啊这种方式做这个事的,但是其实如果说他们之间啊,虽然我们刚才提到的这些东西都是可选项,但但是他们不是说所有的东西你都可以加上,那你比如说我们如果用到了SC的,那你那个后面的字段名还需要吗?字段类型还需要吗?不需要了,对吧,因为它是根据你这张表来直接创建的啊,所以就不需要这个意思,那不是说所有的东西都写着中括号。
14:26
就是说你所有东西都是一把全部选上,也不是的,他们之间有的关系是什么互斥的,就相当于对吧,有你就没我啊,就有这种关系,主要是体现在最后的S啊,主要其他的东西倒还好,基本上都是可以一起写下来的,但是真的在生长环境建表的时候也不会这么复杂,顶多我们的公司当中建表的时候用到的就是这样的东西啊,我们大家说一下,Create external table if not exist,然后呢,表明对吧,这个东西有,然后就是字段名,然后再加一个part的BY,一个字段名,分区表,工作当中绝大部分见的都是分区表。
15:06
绝大部分建的都是分区表,而且我们刚才说了X的这个关键字是不给代了,因为公司当中绝大部分是外部表,绝大部分是外部表以及分区表啊,分组表也比较少用,到时候我们去看一下就知道了啊,分工表它是在数据量极大的时候才会用到分钟表,所以一般的中小型公司是看不到分组表的,数据量达不到那么大啊,是没必要的,我们有分区表就够了,一般是这样的情况,最后呢,在用form limit这个东西肯定要有的,最后呢是location,哎,指定一个加载位置啊,但是如果说你在工程当中用到了其他的一个格式,用到了一个其他的一个格式,那store as这个东西也是会用的啊,如果说你是TS,那这个东西也不用的,因为它默认的就什么。TT的格式的啊,就是文本文件这种格式的,除非你用到其他的格式,当然在工作中往往都会用到其他的格式啊,因为还会用压缩啊,特别是对于原始数据导进来的数据,第一张表的时候,对吧?呃,后面可能慢慢的说聚合之后啊,数据量越来越小,那我可以不用压缩对吧?我把每天的数据我可能看的新,那我还没必要用压缩,一天就一条数据对吧?那如果说是原始数据导进来的一天呢,可能几个G的数据对吧?好几个G是什么,有的公司呢,可能上T,那这种呢,在原始的建表的时候肯定要启用什么。
16:29
压缩啊,启用压缩的方式,行,这是我们整体所聊的这个创建表这块,那之后呢,就是我们说的管理表和外部表啊,那一般有时候我们称内部表跟外部表,它们俩的区别在于。删除不了,对,主要是在区别,在于删除这张表的时候有区别,对吧,如果说是内部表,我们在删除这张表的时候呢,SDF数据和原数据都会删除对吧?那如果外部表只会先删除原数据啊,不会删除真正的数据,所以说找到啊这两个数据,我们一般就不会考虑去删它了,所以刚才我们也正好提到了,在工程当中,我们绝大部分人用的是那种外部表,因为我们不想删数出据嘛,对吧?啊内部表呢,有时候也会用,就是中间表,临时表,这个时候才会用内部表,往往其他都都用的是外部表啊好,这是我们所说的监库建表,那这里边其实有很多同学测试过程当中呢,发现了一个现象,这不是问题啊,但是说哎,我怎么发现这个问题,这不是问题,这个现象什么意思呢?你你仔细看这这个库啊,就是default库。
17:42
Fort库的地址是不是相当于就这?对吧,有default名字吗?有没有吧,那所以说有同学就做个测试了,哎,做什么事呢?来我们举个例子啊,在这个底下我去干什么事呢?好多吧FS。
18:03
干那个你啊,根目录下我来一个我随便啊这个名字啊,既然是随便的话,就如此的随便是或者说叫好有了这个路径对吧,那么我这个时候呢,去创建一个什么database,我这个database叫什么呢?我叫have。我看一下有没有害吧,别到时候之前好像是按正常来说,Have应该删掉了,对吧,好,那我们就是吗?对,我加一个我指定路径为。我指定路径为它,大家想的是,哎,你应该在这个路径底下给我去创建一个路径,对不对。
19:07
大家很多同学想的是这样,其实不是的,他用的就是你这个路径作为他的库的,也就是说你这样过了之后就是这样。那你看啊,这个库是不是跟我们的OT库就很像。Default库它有default名字吗?它并没有,它用的就是什么use have will house,也就相当于default库是咱们建的吗?不是吧,是我们进到have之后,它自己就有了呀,相当于是系统自己给我们建的了,对吧?它建铺的时候呢,其实指定的路径就是什么use the have warehouse,它没有后面写default,所以基于这种情况呢,有的人看着不爽,对吧,所以在大家用这种时候啊,就是如果说你指定路径的时候,你就指定到哪啊。指定到have,尽量这个路径最后一层路径呢,跟你这个表明保持啊,不是跟你这个库明保持什么。
20:02
一致。啊,而且呢,最好是加一个DB,就表示它是一个什么数据库,对吧?啊表示它一个数据库,这样默认的我们去在直接创建一个数据库一样的,对吧,它会加一个点DB,那我们创建表的时候,指定位置是不是也存在这样的现象。对吧,啊是一样的,所以在大家如果用到location去创建表的时候也一样的,最后一层这个目录名称跟表名保持一致就好了。对吧,统一管理的,因为有可能人家看到你这个东西,哎,我在里面放一些其他的东西,那这个最后库一删,所有东西都删掉了,这个就不合适了啊,这个就不合适了啊,所以要注意一下最好呢,Location最后的地址加一个什么,还点DB见表的时候呢。假如说我建了一个have表,建表的时候最后一层路径呢,你加一个have啊,这样你看着会舒服一些,其实这不是问题,这就是现场,它它是允许说你的库名跟最后的这个地址是不一样的,因为对于have来说,你俩没有关系,我只是说把这个库原数据信息放在了MY搜里边,然后原数据信息呢,就保存着你这个库跟HDF路径之间的一个关系。
21:18
所以他们俩是没有直接关联的,就相当于在MYSQL当中保存了一个映射关系,你是这个库对吧,我在HDFS是这个路径。他们俩是这样的关联的,他们俩没有直接关系,不是说必须相同的,能懂这意思吗?只是说把它映射起来而已啊,我我知道,哎,我要找这个库。到买斯克当中一查啊,你是这个路径OK了啊,他们是这个关系,没有什么其他的关系,不是说名字必须得一样,这个完全没有关系,对吧,这个在建库建表的时候稍微要学注意一下的啊,之后我们所聊的DDRDDR当中呢,就是我们还是一直强调的这两个语句。如果从文件加载,那我们就用漏,如果是从其他的表当中去查询加载音色的select,其他的加载数据其实都不是那么常用。
22:09
啊,不是这么常用,那导出导出的话,其实这个和这个用的会多一些啊,用的会多一些,一个呢是用哈命令去下载啊,群里有同学说我下载的时候有问题,那是因为你的路径应该是不存在的,一个路径对下载那进去路径不存在啊,你下载时候注意一下路径点存在就盖了,那个是SDFS那个命令的对吧?呃,然后还有一个S库,把数据呢导到MYSQ里边,一个是导到本地,一个是导到MYSQL。啊,所以说这两个呢,会常用一些,其他的反而会用的少一点啊,用的少一点,但是呢,咱们了解一下,知道一下它方式还是比较多的,对吧,但是我们重点就掌握这些就够了,呃,查询我们就不多做回顾了啊,因为就比较浅显,说实话这些东西没什么特别复杂的地方啊,然后下去可以自己去练啊。
我来说两句