00:00
呃,我们头一天是从这个创建表这块开始讲的是吧,就是从表的这个增删改查方面,然后首先我们看的是它的一个什么见表的一个语句吧,啊,这回过头来我们看那个建表语句啊。当然这中间还有我们没讲到的,后面还会继续说,首先这个创建一张表,然后创建表的时候,他要指明是否是内部表外部表啊,啊内部表跟外部表的一个区别主要体现在什么地方,就删除表的时候,他会不会把实际的数据给删掉了,哎主要是这块区别,然后有这个区别之后,你需要考虑的问题就是公司当中应用的,你像那种如果有很多框架。都用的一个数据,那你肯定要对它建外部表啊,哎,你自己的中间的一个结果表或者中间表,你可以用内部表来来表示啊,因为你中间表你到时候你不想用了,你直接删掉,你把数据删掉没关系,哎,省一点存储空间是吧,但是原始的那个数据你一定要是要建成外部表的,建成外部表的。
01:09
然后后面就是我们讲的这个分区表是吧。啊,建的分区表,当然这个分区它跟MAP6我们也讲过分区是吧,虽然它名字都叫分区,但是它不一样吧,你想看MAP6的分区最后是从文件的层面上来分的区,是不是它分成了好多个不同的文件,什么part杠,什么00000,然后00001等等这些内容吗?啊,分出来的区它是文件,但是在have当中,我们那个分区分的是什么?文件夹吧,其实也就是一个目录,而且这个目录是在以表命名的,然后他下一层级有一个目录吧,对吧,就是因为数据量很大的时候。我们就不想将数据放在同一个文件夹下,那你查询的时候,因为我们之前做跟MY做对比的时候就已经讲过了,Have当中是没有索引的,如果你要查一个数据,它是不是要扫描整张表啊?
02:07
那如果表数据特别大的时候,你要不见分区表的话,扫描的数据太多了,就是速度太慢,效率太低了是吧?所以我们引入了这个分区表,让你在扫描的时候啊,你可以指定某一个分区,那指定分区以后,它只扫描该分区这个文件夹下的所有文件吗?啊是这样的,它的一个效率就能提高上来。提高上来,然后这两个我们还没讲,然后这个是不常用的,就建表的时候指定按哪个字段排序,这个是不常用的。不常用的,我们一般是查询的时候再去考虑排序的问题吧,肯定是查询的时候再考虑排序的问题,后面这个地方,这个地方就指定字段之间的分隔符,或者说你字段用了特殊的什么。类型的时候,就是用了那些复杂类型map。
03:00
还有一个structure的结构体吧,哎,这种结构的时候,你要指明这种复杂结构类型的时候,哎,你要指明它中间的一个分割符是什么啊是什么。然后这个是他的一个按什么文件格式去存储啊,就目前我们接触到的应该都是TXT吧,啊都是TXT啊,肯定既然有TXT,它肯定还有其他的一个内容,因为至少我们知道的它跑的是ma对吧,而且ma你通过音色的插入的时候,它最终的结果,它呈现的是一个零,什么杠0000,这个东西一看就知道是麦热最终的输出结果了。好,既然有输出结果,那输出结果是不是可以是压缩格式的呀,之前在MA6应该讲过吧,哎,是压缩格式的,那么起码说明它除了TXT格式之外,它还有一种什么类似于mmr当中你使用的压缩的格式法来存储吧,哎,这肯定是可以的,肯定是可以的啊,当然它还有其多其他的很多种格式啊,很多种格式啊,到后面再一一展开说,最后一个就是指定位置吧。
04:08
你不写指定位置,它默认是在这个表这个目录下对吧,这表在那个库,你有一个user have willhouse这个路径对吧?啊,这是它默认的,当然你可以改它默认的一个地方嘛。第一种改法就是你在配置文件里面,它默认的一个配置文件是不是这个路径啊,你把这个路径给改了也可以吧,或者说你在建表的时候干什么。加上这个参数来指定这张表存储的路径吧,啊存储路径也是可以的,这是整个这个建表的语句,建表的语句现在我们中间没说的就是一个分筒,还有一个这个。就是存储文件的格式吧,其他的我们都已经讲过了,然后这个是不常用的啊,基本上也不会用,所以我们就不讲了啊,主要现在还有两个稍微记着点就行了,一个是分红,一个是存储,按什么文件格式存储的,这两个还没讲,其他的内容应该比较清楚了,比较清楚了,这你需要注意的就是这两个稍微记一下啊,就是哎,就是见表语句里面啊,Part提ition跟这个课都加了ED吧,都加了ED啊,为什么要提醒,因为今天我们就要讲这个不加ED的它是什么意思。
05:24
啊,他他两个分别都有一个他派,还有一个派啊不加一定的,你一定要学完之后做一个表格,自己互相总结一下吧,总结一下帮助你有时你记忆,要不然真真的容易特别容易混啊这块啊,这块的一个概念就见表语句里面是有一地的,建表语句里面有一滴的,你现在这样记好吧。这是我们所讲的一个界面语句,后面是具体的讲这个分区表。你要建一个分区表的话,你是不是就是刚才我们说的它的BY啊,这个带一个字段是吧,当然这个字段是相对于你表结构里面这个字段是一个全新的字段吗。
06:03
我们当时是不是试过用这里面的某一个字段来。在这个地方来表示啊,它是不是说重复定义了呀,啊重复定义了也就是说你这个分区的字段啊,一定是跟表里的结构里的字段是不一样的,是不一样的,这是分区啊分区这一块,而且分区它分的是一个文件夹嘛,啊,他就为了防止数据量太大过过高提高这个查询效率的。提高商业效率之后,这块我当时应该是少讲了一个东西,这块这个这个点我当时没有演示,可以查看分区表的多少个分区。受partitions,然后跟那个表明啊看一下。啊,这样打开了我们那个还的客户端,首先我们看一下我们有还有哪些表是吧,这个肯定是一个分区表是吧?啊一个分区表,那我们受part k2T2,然后对于这张表吧。
07:11
就是可以查看他所有的一个分区信息啊,可以给你展示出来这样的这个就可以查看一个分区表,当然你要查看一个分区表是吧,如果说你查看的不是一个分区表。Student不是分区表是吧?啊会怎么样呢?他是说这不是一个什么。不是一个分区表达啊,也就这个语法,它一定是在一个分区表的前提下才能查看的,查看它所有的,把所有的分区展示给你,至于这分区底下有没有内容,他不管吧。他不管吗?他不需要,那这个时候你就想到知道他不需要跟HDFS去做交互吧。因为这个分区信息在哪存的呢?表信息,分区信息是不是在MY克里边有一个什么TBLS是吧?当然大家看到这个表,这个表里边存的就是你have当中所有的一个表信息吧,还有一个什么partitions对吧?啊partitions啊,它还有一个外键,这个外键指向的是不是这个表里面的ID啊,还有印象吗?
08:14
没印象了是吧,我们看一眼啊。102麦store,然后表是首先看一下这个TBLS对吧,它每一张表它有自己的一个唯一ID吧,这是一个自增主键,能看能感觉到吧,而且你删了之后是不会有。再重复的赋值的吧,啊,就一直往上递增的,往上递增的啊,再我们看一下它有一个partition这个表啊。Partition。嗯,K啊这个这个吧,你看这个它有一个外键嘛,这个就指向的是,哎这个分区啊,是哪个表里边的吧,哎,这因为这个这个表的ID啊是唯一主件嘛,啊唯一主件,所以它的唯一标识是这样的来关联的,那我们就知道你一走哎你走这执行这个。
09:13
这条开课语句的时候,其实他就去my serve里边查询了两张表吧,对吧,关联了两张表做了一个交易操作啊,所以说这块你对于DDL这块的一个操作,注意啊,数据定义语言DDL的一个语言,它操作的数据是不是MYS里边的一个数据,对吧,它不涉及到跟HDFS的一个交互吧,但是我们后面所讲的DML。就数据的一个控制语言对吧,数据控制语言它就涉及到跟HDFS来交互了,这两个地方一个是原数据,一个是实际的数据的一个存储位置。哦呃,我们继续往下这块就是增加分区跟删除分区这边有一个注意点吧,什么很恶心的一个点啊,当说的就是增加多个分区的时候,中间用的是空格吧,但删除的时候非要用逗号是吧?哎,我们当然试了空格他是过不去的,语法报错了是吧?啊这不要恶心啊,你稍微,但是像这种点你就得记住啊,记住其实你记不住,你真的一操作报错了之后,就也能想起来是什么问题啊,是什么问题你就稍微注意一下就行了啊,它可以增加分区,删除分区,然后你可以查看分区表的一个结构,查看分区表的结构的时候,我们是不是能看到,哎,它有一个单独的partition的一个information呢,而且他把这个东西也算到它一个字段里边了。
10:44
像我们查数据的时候还记记得吗?C那个新查一个分区表数据的时候。你表明明student只有两列ID和什么,那但是你查出来的时候,它多了一个什么分区列吧,哎,分区列列它也当做表里面的一个字段的,是这个意思,所以说这个地方也能说明出来,它不能重复吧。
11:07
对吧,我们当时建分区表的时候,它不能跟表里边字段重复,因为它是在表,它是把分区的这个字段啊,是当做整张表的一个列的,那你两个列同名是什么意思嘛,对吧,肯定是不可以的,这样顺着来看这个问题啊就通了,为什么它不允许你在分区,建分区表的时候,帕上BY的那个字段不能是你之前建表的字段。啊,不能是电表的字段啊。这是正常的一些基本的一个操作,后面我们讲了二级分区表啊,二级分区表其实就是什么。你的分区字段有两个吧,有两个而已,而且它是建立了多级的目录,对吧?啊,它建目录的一个顺序呢,就是根据你什么。它提be,哎,这个字段先后顺序吧,哎,哪个在前面,哪个就是更高一层的目录,哎,哪个在后面,哪个就是下一级的目录,下一级的目录,当然你要往多级分区表里面插入数据的时候,那你就必须指定到最后一级分区吧,啊,就跟我们像简单的就一级分区表一样吧,你往一级分区表里边插入数据的时候,你不能只写到表明吧。
12:21
你要指明你这个数据具体要往哪个分区里面插入吧,哎,要指定到详细的一个分区的,当然你多级分区的话,你需要指定到最底层的那个分区,一层一层的,每一层都要指定。啊,之后是我们所讲的这个东西,是先把数据上传到目录吧,然后我们发现个表啊,它产生了不一样表是这样的,我们建在have当中,创建表以后,我们使用库命令把数据塞到这个表目录下,然后你在have里面直接就能干什么。
13:01
查到吧,哎,就能查到数据,但是我们当时做分期表的时候不一样啊。我们分区表这个目录啊,自己创建的,然后我们数据呢啊,通过这个put命令。Put命令在这吧,啊,Put命令把它上传上去,我发现你查的时候是不是查不到任何数据啊,为空的对吧,为空的,其实这跟表其实是一样的。啊,为什么说是一样的,我们一直所强调的have,它是一个分析框架。分析框掉,它是有原数据和实际数据的,原数据其实就是跟数据的一个对应关系,对吧?啊,有他的一个路径啊,什么权限啊等等,它都掌握着,他必须要有这个原数据,它才能查到实际的数据啊,为什么我们建表以后,把数据塞到这个表的目录下能查到,那因为你创建你在create这张表的时候。是不是你MYSO克里边会多一条数据啊,MY克里面那个TBLS那张表会多一条数据吧,也就是说他已经有了这个表,就假如说student的那张表,它有原数据信息啊,他已经有了原数据信息,而且他已经标志了。
14:15
这个表啊,跟HD上有一个路径是关联的啊,它已经有了这个数据了,已经有了这个信息了,那此时你再把数据放到这个路径下,它是不是就可以查到啊,对吧。那有同学说,那我分区表,我创建表的时候,我也指定了分区啊,对吧,但是你想想看,你创建分区表的时候,你指明的是什么啊。是分区字段吧,是不是分区字段啊,你有具体指定哪个分区吗?并没有吧,你想想看,你随便创建一个文件夹,叫month等于201709,然后D等于13,那你你这个原数据里边可不可能有这有这个信息啊。
15:00
不可能有吧,是不是因为想想看你这个操作都是在他杜里边操作的,你用的是make d来创建的这个目录啊,创建的这个目录。所以原数据里边是没有啊这个信息的,没有这个信息的,那你在查的时候,那肯定查不到啊,因为没有原数据信息,那此时我们有三种方式吧,第一种是不是执行一下修复命令啊修复命令,第二种是干什么,把分区添加回来吧,哎,之前我们讲的,哎,添加分区的一个操作,你把分区给我找回来就行了啊,最后就能查到,这是执行添加分区的一个分区。那最后一个。其实就更简单了,直接录的进去吧。漏进去其实你都不用创建这个文件夹,对吧,你漏的时候这个文件夹不用你手动创建了,你在加载走这一条嗨客的时候,它就能自动的帮你把这个路径给创建出来,是不是啊,因为我们之前全部都是通过logo的方式加载进去的嘛,哎,而且这种方式也是最常用的,也是最常用的,除非这是什么情况呢?你啊,那个数据已经存在在那了吧。
16:19
你在已存在的数据上见表。已经存在的数据上建表,那么此时你就要可能要添加分区或者是修复一下吧,对不对啊,当然如果说是这种情况,举个例子啊,这个文件呢,已经存在了,在假如说user爱的硅谷。啊,下面有一个假如,就叫什么date。呃,一个数据吧,一个log log是一个表明可以吧,表明是不是也是一个文件夹呀,但它下面还有什么呢?还有一个month,这就就类似于这种Mo,等于它是按每天的数据来来。
17:00
存储的,然后上一级目录是帽子,然后下级还有一个,对,然后每个这个一般都有30个目录,对吧,而且你这个数据很大了,很大了很多了,对吧,那这个时候你在建表以后你就不要执行这个,你不要走走这个了,执行添加分区吧,你累死了是吧,你直接修复一下它是不是能把你所有的分区全部能够找回来,哎,所有的分区全部能找回来,这是你要注意的点,就是已经存在的啊,虽然说这两个相对来说啊,不是特别常用,但你得知道了,就公司是可能有这种需求了啊,就是说他数据已经存在很久了,此时他要开始对这个数据进行分析了。啊,要分析了,那你就是在已有的数据上建的表,而且建的还是它,它本身就是一个分区表啊,你要建分区表,那你直接查又查不到,那你就要想到有这个修复命令,他能把所有的这的分区给你找回来,给你找回来是这样的啊。
18:01
那后面就是我们具体的一个修改表啊,当然在公司当中,我们在讲课的过程当中就讲过了是吧,其实这个操作是不常用的了啊,一般都不会去改这个表,特别是改什么字段这种东西的。因为表在很多任务当中,每天执行的任务当中,他都在采用着,都在采用着,所以说一般你真遇到这种非要改字弹,或者说加加列啊,增加列啊,减少列的一个需求的时候,你都新建一张表吧,你再把数据导出来一份,而不要尽量不要去改原来的一个表的信息。啊,除非项目经理已经说了,这张表已经废弃了,因为没有人在用,那你可以,如果说这个数据对你还有用的话,那你就把表改吧改吧就行了,你就不用再执行的导数据了,也比较麻烦,但正常情况下,一个表里面数据如果很多的话,它肯定是有人用的,有人在用的啊,当然这一块的一个语法你稍微了解一下,就是change at和replace嘛,分别是修改、添加和替换嘛,替换,但是你要注意的一个点就是替换,它替换的是什么?
19:07
整张表所有的字段是不是啊,所有的它如果你要改变的话,你就change着就行了,改变某一个字段,但是这个replace它一定是替换的,是整张表所有的字段,它不是替换说某一个字段,某一个字段它是不行的啊啊这块就主要了解,最后就删除表,删除表删除表的时候你要注意的就是呃,一个内部表和外部表的一个区别就行了。啊,就是外部表不会把实际的数据给删掉,实际的数据给删掉啊,就是我们之前所讲的一个D点啊,它的一个所有的语言,就是基于数据库层面和表层面的一个增删改查吧,没有什么其他的内容了,所以他的一个所有的一个这里面操作的所有的一个数据啊,针对的数据都是买S里边的MYS里边的一个表的数据,就是TBLS啊啊啊等等,对于这些表的一个内容的一个修改。
20:04
而不是对还是D上它具体的一个文件的一个内容的修改,这是我们的一个第四章所讲的内容,之后到我们第五章DML。对于数据的一个控制操作语语句吧,就是导入导出啊,最主要就是导入导出啊这两块,当然这两块你是要结合起来看的。其实我们之前都讲过了,在讲到这一章的时候,其实我们已经这些东西都在前面都用过了吧,啊,因为我们讲其他这个语言的时候,你不能。就光玩数据库或者表吧,你肯定要导入一些数据,导入数据那首先最常用的是这个logo啊,加载数据。加载数据,它这个语法,它可以从本地也可以从HDFS加载吧,这两个从两个不同的地方加载,它有两个不同,有一个不同的地方,对吧,哪不同。
21:01
从本地加载的话,它的一个原始数据会不会丢失啊,不会吧啊,也就是它其实是copy上去的啊,Copy上去的CP,或者你理解为刚put上去的,是不是刚刚put上,然后如果说你是从HDF上我们看过了,它会怎么样啊,是木的吧,M过去的,木过去的。啊,你只要记住这个就OK了,当然你要加载到具体的分区表里面,你要指明一个分区字段,指明分区字段这是漏的,后面我们讲的是这个音色的。音色的插入,音色的插入,首先你可以单独的插入一个什么一条数据吧,Value这种方式还可以干什么?查询的方式往里面导入吧,哎,查询的方式往里面导入。当然这个查询还可以从多张表里面查询吗?就是后面跟着多个查询语句,是不是中间在这吧多张表。
22:05
但如果说你是从一张表,你的查询语序来自于一张表,你可以把表你提到前面去吧,那你后面就不用写from哪张表啊,你可以提到前面去啊,这样也可以啊,一色的,当然色的走的时候它是不是会走,那是六四任嘛,对吧?啊之后还有一个SS是创建表的时候。直接把数据也全部都给导入过来吧。还有一个location这种方式,这种方式刚才其实也提到过的,就是已经存在数据,然后你要对他建表分析,那你肯定要用location这种方式来指定数据,你没必要就说建一个表,然后再把数据移过来,比较麻烦是不是啊,哎,你直接用location这个关键字,你就指明你这个新建的表的位置啊,哎,就在以前的目录上就好了啊,就不用再导数据了,然后后面讲了一个input,但这个input我们当时当时第一次导的时候有问题了,他说那个路路径是不可用的,是不是啊?哎,最后我们知道他是要通过这种xbo导出以后啊,它不仅有原数据,还有一些原数据吧,麦ma data等等这些信息吧,啊,它一并导回来的,它必须是要这种文件夹才以的啊,才可以的。
23:20
那相对来说他还有一个导出,导出也用的是音色的这个关键字,银色的可以导出到本地的一个文件夹,或者说导出到一个NDFS的一个文件夹嘛,啊这里边就少一个local的问题,少local的问题,但是导出来它也是没有格式的吧,啊,你也要需需要指明。导出以后你的数据是按什么分割的,要不然他一堆数据全部粘在一块,特别不好看。不好看好,然后说他的文命令其实就是get吧,因为它那个实际的数据就是存在还是DFS,那你用get肯定是能获取到他所有的一个数据的,所有的数据的,然后什么还有shell,其实就是杠一跟杠F嘛,然后追加到这个一个文件里边。
24:08
啊,追加到文件里边,最后是xport导出,导出之后我们能看到它导出的一个文件夹,还是内容比较多的吧,它会导出一个原数据信息也给也给导出来,然后你才能对数据进行导入嘛,啊第二次在我们使用X导出以后才导入成功的吧,才导入成功的,第一次他说那个路径是不可用的,之后我们还会讲一个SCO。这是一个专门的框架,这不是一个关键字啊,这不是一个关键字,这是一个专门的框架,这个框架实现的就是关系型数据库跟非关系数据库之间的数据的导入导出。你可以把MY的一个数据啊来导到have里边。也可以把have直接导到MY里面,这就很方便了,这就很方便了啊。啊,这是一个专门的框架,当然后面我们学了h base以后,它还可以跟h base之间的一个数据的一个互导也是可以的,啊,互导都是可以的,这是一个专门的框架,后面我们专门有一天的时间来讲这个框架的。
25:06
后面还有一个这个窗开的就是清除数据,清空一张表,当然他也有这个。内部表跟外部表这个区别吧,是不一样的,不一样的。啊,这是我们所讲的这个DDL和DML,它的一个基本的一个语句的一个操作,一个语句的操作。
我来说两句