Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间,使用数据库可以表明表命名冲突。
如果用户没有显式指定数据库,那么将会使用默认的数据库default。
1 创建数据库
创建一个数据库与SQL语言一样
CREATE DATABASE test;
有时候为了避免数据库已经存在,而又创建一个同名数据库引发错误,我们可以使用下面的语句
CREATE DATABASE IF NOT EXISTS test;
通常我们创建一个新的数据库,Hadoop会在/user/hive/warehouse/
创建一个/user/hive/warehouse/test.db
的目录,接下来我们存储的数据都会存放在这个目录下。
当然我们也可以自己来指定这个目录,这个目录位于Hadoop上,会自动创建。
CREATE DATABASE testA
LOCATION '/testA';
我们还可以在创建数据库的时候为这个数据库增加要给描述信息
CREATE DATABASE testB
COMMENT 'test for database';
除了描述信息,还可以增加相关的键-值对属性信息
CREATE DATABASE testC
WITH DBPROPERTIES ('creator' = 'JinbaoSite', 'data' = '2018-05-07');
2 查看所有数据库
查看数据库的命令为
SHOW DATABASES;
如果数据库太多,使用上面的语句会显示全部的数据库,我们可以正则表达式来筛选出需要的数据库
SHOW DATABASES LIKE 't.*';
3 查看数据库具体信息
我们可以使用下面语句来查看数据库的具体信息
DESCRIBE DATABASE testA;
还可以增加EXTENDED
来查看更加具体的信息,比如我们之前添加的元信息。
DESCRIBE DATABASE EXTENDED testB;
DESCRIBE DATABASE EXTENDED testC;
4 设置当前工作数据库
USE命令用于将数据设置为用户当前的工作数据库
USE test;
不过我们使用这个USE并没有什么感觉,因为它并不会显示在哪个数据库下,也无法查看当前是哪个数据库。但是我们可以反复使用USE,这并不会进行嵌套。
我们也可以通过设置
set hive.cli.print.current.db=true;
显式展示当前的数据库。
5 删除数据库
用户可以删除数据库
DROP DATABASE testB;
DROP DATABASE IF EXISTS testC;
使用IF EXISTS
可以避免因数据库不存在而报出警告信息。
删除testB和testC都会删除其在Hadoop上的存储路径,但是删除testA并不会
通常情况下Hive是不允许用户删除一个包含表的数据库,用户需要先删除数据库中的表,然后再删除数据库,但是也可以在后面增加CASCADE
使Hive自行先删除数据库中的表
DROP DATABASE IF EXISTS testD CASCADE;
6 数据库增加键-值对属性信息
数据库的元数据一般都是不可更改的,但是我们可以增加相关的键-值对属性信息
ALTER DATABASE test SET DBPROPERTIES('edited-by' = 'dongjinbao')