Hive SQL 之 數據庫

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章