开发者学堂课程【大数据Impala教程:SQL 语法--表特定语句--alter、drop、view】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/722/detail/12894
SQL 语法--表特定语句--alter、drop、view
内容介绍:
一、Alter table
二、truncate table
一、Alter table
Alter 关键字主要用于对表执行相关的更改的操作,比如说用 Alter 加上 rename to 就可以去修改一个表的名字。全称就是 Alterer table 原来数据库下的表把它改为一个新的数据表下新的表名。
另外一个用 Alter 加上 ADD COLUMNS 就可以向表中增加列,后面列可以增加多个,接下来加上 DROP 关键字就相当于可以去删除列,同样的用 CHANGE 关键字可以去更改一个列的字段类型和它的名字,这一个跟 Hive 比较类似。
事实上在企业实际开发过程中,当去创建一个表, 觉得它当中的名字、字段类型不正确的时候,通常有两种方式可以做:第一种,把它用 Alter 语句进行一个修改,另外一种直接可以把它重新创建,在创建的时候指定这两种都是可以完成的。
针对表的删除语句
针对表的删除语句主要有两个,一个叫做 drop,一个叫做 truncate。drop 语句跟汉语中比较类似,但是要特别注意,如果说 dropimpala 当中这个表是一个内部表,它会连同表以及它的数据全部删除,创建一个表最终会位于 HDLS 的一个路径下,这个数据将会也消失。
比如去创建两个表,一个叫做内部表,如下图:
首先 create table,第一个表叫做内部表 inner,这个表简单写一下字段,有一个 id int 类型的,然后有一个 name steing 类型的,这是第一个表,插入一条数据 insert into table t-inner values。当创建成功之后,这一个 t-inner 表就会位于的 HDLS 当中,刷新一下,这个表对应的文件夹下面是它的文件,这是内部表。
接下来创建一个外部表,如下图
外部表跟 Hive 很类似,在创建表的时候加上关键字 external 来指定具体的路径。创建的 external table,叫做 t-叫做outer,这个表也是有两个字段,int,name string,在创建这个表的时候可以指定一个路径叫做 location。这个路径先不写,先创建路径,用 hadoop 命令做一个创建,比如叫做 hadoop fs -mkdir,就是 impala/outer。这时候因为它是一个副路径,前面加上一个-p 的参数,比如说等一下把数据指定到这个路径当中,注意这个路径上来说,再给它收一个执行的权限,否则的话它不可能创建成功的,会有权限拒绝的问题。这样相当于创建一个路径,impala 路径下有一个 Alter,这权限是足够的,接下来把这个路径作为它外部表的一个所在,加上最后的分号,这样就创造了一个外部表。同样的使用 insert into 语法往里面插入条数据,into table,叫做 t-outer,同样也给它指定两个字段,比如二号叫做 lisi,这样就创建了一个外部表,并且它也有数据,刷新看,实在没有数据了,大多数情况下创建的是一个没有加上external 这样的关键字的表,比如说刚才创建的 t-inner 这个表。现在使用 show 命令、show tables,发现内量表都可以看见,如果说这两个表都不好进行删除,首先去 drop table t-inner 它是一个内部表,执行后,这个表再去查看已经没有了,drop 这个表,除了把它的原数据相关性删除之外,连同这个表位于 htl 的文件也会消失。
接下来验证一下,内部表默认路径下,在 user hive warehouse 下 impala,发现那个文件夹连同文件夹的东西都没有了,还有一个 impala outer 一个外部表,把它删除, drop table t-outer ,查看这个表单没有了,但是做一个刷新,会发现数据依然存在。如果一个表是一个内部表的话一定要特别慎重,因为一不小心可能表对应的数据在 htl 上的文件也会消失。
二、truncate table
这个语句主要是删除表中的记录,但是保留表的结构,跟基本的 SQL 语法一致,比如有一个表想把里面的数据做个清空,但是这个表又不想把它删除,就是表的结构还保留下来,直接 truncate table 就可以完成,这样就可以完成针对表相关的删除操作,当然大多数情况下是 drop table 一定要慎重。
view 视图
在这个条件下中,它也支持视图的概念,相当于一个预查询的 SQL 语句,一个虚拟的表,创建视图用 create view 后面加一个视图的名字,然后 as 后面就是要查询的语句。
如图,直接针对一个表进行查询:
直接 select*from employee,在这种情况下相当于一个普通查询,没有任何的视图概念,这种查询不好的地方在于,比如在企业当中,一个表当中有很多字段涉及到非常严重的隐私问题,不需要开发者能够看到,就可以把一些查询语句预先创建成一个试图让它需要查询的时候,针对视图进行操作。
创建视图语句叫做 create view,后面是一个选择叫做 if not exists,如果不存在创建,如果存在就不创建,比如创建一个视图叫做 impala view。这个叫做视图名字,后面 as 就是 select 语句,在 select 查询当中,除了 select*之外,也可以去查询指定的,比如只想让这个查询者看到 ID, name 以及年龄,关于 salay,不希望看到,这样就可以创建这样一个视图:
后续的话用户就可以针对这个视图进行相关操作,比如来一个 Select * from 这个视图。发现实际上视图底层就会持续执行 select 语句,反过来相关的结果相当于一个虚拟的表盘,更加专业的叫以预定义的 SQL 查询形式的表的组合,这个查询过程当中可以是所有的行也可以是指定的行
修改视图用 alter view 跟之前的一样,最终如果不想要直接是 drop view 即可,比如想把视图给它删除掉,直接来一个drop view,然后视图的名字 impala view,这样就可以进行相关的删除了。
然后再去配合其它软件做一个权限控制,若给保留一些查询的只创建一些视图,但是权限只能够达到去看这些视图,并不能去做相关的查询,那之后权限只能去针对视图进行操作,创建视图,相当于某种程度上做了一个技术上的屏蔽,这就是修改表结构、删除表以及视图的使用。




