开发者学堂课程【大数据Impala教程:SQL 语法--数据库特定语句】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/722/detail/12892
SQL 语法--数据库特定语句
内容介绍:
一、数据库特定语句
二、删除数据库
三、小结
一、数据库特定语句
1.创建数据库
Impala 的 SQL 语法,跟数据库相关操作的语句,数据库语法无外乎就是创建数据库,删除数据库,语法就是跟 hive 一模一样 cerate database。要强调的是在进行具体操作当中,可能会发生的问题就是权限不足。当创建 database 数据库的时候,下面不是成功,而是是报错,这个错误,如果通过对 Hadoop 学习会非常熟悉,即 security.AccesscontrolException 权限访问异常。后面是 permission denied,原因很简单,因为 Impala 在执行的时候,默认 Impala 用户进行相关操作。
2.具体操作
(1)当创建数据库的时候,默认情况下,Impala 创建的数据库也位于 hive 数仓路径下 user/hive/warehouse ,创建一个数据库就在下面变成一个文件夹,创建表就在文件夹下面变成一个子文件夹。
(2) 默认情况下,这个文件夹属于 root 用户超级用户主的。后面的权限针对 root 用户,它有读写执行的权限,针对其他的,只有 x 权限,这些意味着 Impala 用户进行 write 写的时候写不进来,报一个权限拒绝的问题。
3.权限
针对这种操作方式会有两种方式,第一种是指定文件夹授予权限。把指定文件夹在下面变成777权限。或是专门给用户授予执行的权限。另一种方式。在 Hadoop 配置文件中把权限进行关闭掉,改为 false。通常使用第一种方式,否则建表不成功。
4.创建操作语句
(1)接下来看一下,创建一个数据库的操作语句。现在连接到 Impala 上创建一个新的数据库 create database it_impala,回车。因为已经授权成功,创建好的数据库。在 hdfs/user 路径下 hive/warehouse 是数仓默认的路径。路径下多了一个文件夹叫 it_impala.db。
再次验证了 impala 和 hive 共用同一套元数据,点进去之后看到,权限做了一个修改已经变得清晰,不会报权限异常的问题,如果创建失败,看一下是否是这种问题,修改权限。创建数据库实际上再创建表,切换数据库就是 use it_impala;在里面创建一个表 create table t_test(id int),创建成功会成为数据库下面的一个子文件夹,这一点跟 hive 一模一样,没有任何区别。也是 impala 对应的映射关系,这样就完成了数据库的创建。接下来看一下,创建时的默认路径在 user/hive/warehouse 下,相当于 hive 数仓路径。在 hive 中称呼这种关系为如果创建的表默认受到他的管理的,位于路径下,包括他的元数据,数据信息是否管理,称作内部表。
(2)可以创建外部表通过指定路径,就不会被管理了。删除表的时候数据位于机器上不会被删除。转换到 impala 中也可以创建数据库时指定路径,同时也要注意路径权限问题。创建文件夹叫做 input/impala,之前操作的时候,文件夹已经具有了权限。创建新的文件夹叫做 input/impala1回车,创建之后刷新。impala1 没有修改权限的样子,针对其他用户,只有执行权限。
(3)创建一个 impala 外部表相当于
create external table t3(id int,name string,age int)row format delimited fields terminated by '\t' location '/input/impala/external';
external 表示外部的,创建外部表,表名叫 t3,有 id int,name string,age int,后面是分隔符语句跟 hive 一模一样。
重点在于 location ,因为没有文件夹路径的权限,创建外部表后容易报错。针对 SQL 语句进行调整,从 pdf 上复制下可能会有格式的问题。
(4)打开一个新的文本,做一个简单的修改。当中可能有自动换行等一些格式需要做一个调整 row format delimited fields terminated by '\t' location '/input/impala/external';同时更改路径,把数据放在 impala1 路径下。如果直接进行创建,语句跟 hive 是一样的,会报错,回车走一下,发现 impala 没有读写的权限访问路径,可能会产生问题,所以创建外部表的时候,最好把文件授予权限。产生的原因在于当用 impala 去操作时,默认的是 impala 用户而不是 root 用户,所以打开一台机器,针对文件夹进行授权。创建文件夹统一路径,用来管理数据,可以避免很多权限的问题。
二、删除数据库
1.是否是空的数据库
针对数据库进行删除 drop database,删除的时候要知道是否是空的数据库。如果是空的数据库,可以直接删除。不是空的有提示,需要注意其中的表。
2.级联删除
回到当中,切换到 default 库,正好位于 it_impala 数据库下,在当中删除自己,database it_impala ,不能删除当前默认的库,因为正位于数据库中,所以要删除数据库的时候一定要切换到其他数据库,比如说切换到 default 数据库中再进行删除数据库。还是不成功,错误信息报的很明显。数据库 it_impala 不是空的,可能有一个或更多的表存在。提示删除数据库的是非常的危险的。但在某些场合,明确知道数据库连同下面的表删除。这时候提供了一个级联删除,相当于在删除数据库的同时加上 casecade,杀伤力极大。会连同数据库下的表全部删除,而且是永久删除,因此决定使用这个命令时,需要慎重。回车,这时候把数据库删除,数据库不存在,里面的表也不会存在。
三、小结
这就是针对数据库的相关操作,整体来看语法跟 hive 一模一样,分为内部表和外部表。可以指定分割符,应注意权限问题怎么解决,删除数据库的时候涉及到级点的关系,不为空的数据库不能直接删除。