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自行刪除數據庫的表。數據庫刪除了,其對應的目錄也會被刪除。