问题导读:
1、创建数据库命令中DATABASE可以被哪个关键字代替使用?
2、在创建数据库的时候如何指定数据库存放路径?
3、如果一个数据库中含有表,那么删除该数据库有哪两种方式?
4、删除数据库命令中CASCADE的作用,默认值是?
5、数据库修改操作只能修改数据哪两方面信息?
Hive 中数据库的概念本质上仅仅是表的一个目录或者命令空间。然而,对于具有很多组和用户的集群来说,可以避免表命名冲突。如果用户没有显式的指定数据库,那么将会使用默认数据库default。
一、创建数据库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
如上,是创建Hive数据库的一般模型,其中,DATABASE和SCHEMA表示同一个意思,所有数据库相关的命令中,都可以使用SCHEMA关键字代替DATABASE,如“CREATE DATABASE test” 和“CREATE SCHEMA test ”都表示创建test数据库。
COMMENT:对数据库添加一些描述性信息;
LOCATION:指定数据库存放路径。默认是根据Hive-site.xml如下配置路径后面目录中创建以.db结尾的数据库目录。
hive.metastore.warehouse.dir
hdfs://secondmgt:8020/hive/warehouse
WITH DBPROPERTIES:为数据库增加一些和其相关的键-值对属性信息。
提示:数据库创建命令是在Hive0.6版本中被引入的,属性设置“WITH DBPROPERTIES”是在Hive0.7版本中被引入的。
事例操作如下:
hive> CREATE DATABASE test
> COMMENT 'Test database is used for exercise'
> LOCATION '/input'
> WITH DBPROPERTIES ('creator'='NIITYZU','data'='2015-01-06');
OK
Time taken: 0.07 seconds
查看数据详细信息:
hive> DESCRIBE DATABASE EXTENDED test;
OK
test Test database is used for exercise hdfs://secondmgt:8020/input/testdb hadoopUser
Time taken: 0.018 seconds, Fetched: 1 row(s)
二、显示数据库
传统数据库中一般使用SHOW命令查看所有的数据,Hive中也是一样,Hive中还提供一种用LIKE使用正则表达式来筛选出需要的数据库名。一般模式如下:
SHOW (DATABASES|SCHEMAS) [LIKE identifier_with_wildcards];
事例操作如下:
hive> SHOW DATABASES;
OK
default
hive
test
Time taken: 0.013 seconds, Fetched: 3 row(s)
hive> SHOW DATABASES LIKE 't.*';
OK
test
Time taken: 0.033 seconds, Fetched: 1 row(s)
三、删除数据库
用户可以使用以下模式删除数据库
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
IF EXISTS是可选的,默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中所有的表,再删除数据库;要么在删除数据语句后面加上关键字CASCADE,使Hive先自行删除数据库中的表,默认情况下后面接的是RESTRICT(可以不加)。否则会报以下错误:
hive> DROP DATABASE test;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database test is not empty. One or more tables exist.)
加上CASCADE后,数据库可以正常删除,并且其对应的目录也同时被删除。
hive> DROP DATABASE test CASCADE;
OK
Time taken: 0.607 seconds
四、修改数据库
用户可以使用ALTER DATABASE命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息;也可以使用该命令修改数据库的用户或权限,但是数据库的其他元数据信息都是不可以更改的,包括数据库名和数据库所在的目录位置。一般模式如下:
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;
此处不详细介绍修改功能。