1. 程式人生 > >HiveQL 資料定義語言使用(一)—Hive中資料庫的建立、顯示、刪除和修改操作介紹

HiveQL 資料定義語言使用(一)—Hive中資料庫的建立、顯示、刪除和修改操作介紹

問題導讀:

         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結尾的資料庫目錄。

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>hdfs://secondmgt:8020/hive/warehouse</value>
</property>

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; 
       此處不詳細介紹修改功能。