1、 Hive 中的数据库本质是一个目录,通常数据库保存在hive.metastore.warehouse.dir所指定的目录下,以.db
为后缀,例如testDB.db
,该数据库中的表以这个数据库目录的子目录存在。
注:default这个数据库是hive默认的数据库,若不指定数据库,这默认使用该数据库。该数据库没有自己的目录,该数据库中定义的表以hive.metastore.warehouse.dir指定目录的子目录形式存在。
2、 数据库相关的操作
- 创建数据库
hive> CREATE DATABASE testdb;
# 若testdb数据库已经存在,则会抛出错误信息
# hive> CREATE DATABASE testdb;
# FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database test already exists
# 可以使用`IF NOT EXISTS`语句避免这种情况
hive> CREATE DATABASE IF NOT EXISTS testdb;
- 查看所有的数据库,可以使用正则表达式匹配
hive> SHOW DATABASES;
# 显示所有以my开头的数据库
hive> SHOW DATABASES LIKE 'my.*'
- 修改数据库存储路径
默认是hive.metastore.warehouse.dir指定的目录,可以通过LOCATION
关键字来修改。
hive> CREATE DATABASE testdb2
> LOCATION '/test/mydbs';
- 添加以及查看数据库的描述信息
hive> CREATE DATABASE test01
> COMMENT 'Holds all test tables';
OK
Time taken: 0.132 seconds
hive> DESCRIBE DATABASE test01;
OK
test01 Holds all test tables hdfs://bigdata111:9000/user/hive/warehouse/test01.db root USER
- 添加/查看键-值对属性信息
hive> CREATE DATABASE test02
> WITH DBPROPERTIES(
> 'creator' = 'biglau',
> 'date' = '2019-05-29');
hive> DESCRIBE DATABASE EXTENDED test02;
OK
test02 hdfs://bigdata111:9000/user/hive/warehouse/test02.db root USER {date=2019-05-29, creator=biglau}
- 将某个数据库设置为用户当前工作数据库
hive> USE test01;
在Hive中没有嵌套数据库的概念,所以可以重复使用USE ...
命名
所以可以通过设置一个属性值来在显示当前所在数据库
hive.cli.print.current.db=true
,(Hive v0.8.0 版本才支持)
hive> set hive.cli.print.current.db=true;
hive (test01)>
- 删除数据库
hive (test01)> DROP DATABASEIF EXISTS test01;
Moved: 'hdfs://bigdata111:9000/user/hive/warehouse/test01.db' to trash at: hdfs://bigdata111:9000/user/root/.Trash/Current
ID EXISTS
子句是可选的,加了这个语句可以避免因数据库不存在而抛出警告信息。
默认情况下,Hive不允许删除一个包含有表的数据库。这种情况要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后加上CASCADE
,这样可以使Hive自行删除数据库的表。数据库删除了,其对应的目录也会被删除。