前一篇文章,介紹了什麼是 hive,以及 hive 的架構、資料型別,沒看的可以點選閱讀:hive從入門到放棄(一)——初識hive
今天講一下 hive 的 DDL 資料定義
建立資料庫
CREATE DATABASE [IF NOT EXISTS]① database_name
[COMMENT database_comment]②
[LOCATION hdfs_path]③
[WITH DBPROPERTIES (property_name=property_value, ...)]④;
①若存在則不建立,不存在則建立
②資料庫註釋
③資料庫對映到HDFS的資料路徑
④可以增加其它資料庫配置
查詢資料庫
show databases --顯示資料庫
desc database db_name --檢視資料庫資訊
desc database extended db_name --檢視資料庫詳細資訊
修改資料庫屬性
alter database db_hive
set dbproperties('createtime'='20170830');
使用者可以使用 ALTER DATABASE 命令為某個資料庫的 DBPROPERTIES 設定鍵-值對屬性值,
來描述這個資料庫的屬性資訊。
刪除資料庫
drop database [if exists] database_name [cascade]
cascade 命令表示強制刪除
建立表
CREATE [EXTERNAL]① TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY② (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY③ (col_name, col_name, ...)
[SORTED BY④ (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT⑤ row_format]
[STORED AS⑥ file_format]
[LOCATION⑦ hdfs_path]
[TBLPROPERTIES⑧ (property_name=property_value, ...)]
[AS⑨ select_statement | like⑩ table_name]
① EXTERNAL關鍵字可以建立一個外部表,當刪除表的時候,只刪除描述表的後設資料,不刪除存在於 HDFS 上的資料;
與之相反的是內部表,或者叫管理表,管理表在刪除的時候會把 HDFS 上的資料一起刪除;
這兩者可以互相轉換:
alter table table_name set tblproperties('EXTERNAL'='TRUE');
② PARTITIONED BY 用以建立分割槽表,需要指定列用於分割槽,一個分割槽對應一個目錄,可以提高效率;
③ CLUSTERED BY 建立分桶表,分桶將整個資料按照某列屬性值的 hash 值進行區分;
④ SORTED BY 對桶中的一個或多個列另外排序;
⑤ ROW FORMAT 用於指定資料切分格式;官方的用法:
⑥ STORED AS 用以指定儲存檔案型別,比如 parquet、textfile 等;
⑦ LOCATION 指定檔案儲存在 HDFS 上的路徑;
⑧ TBLPROPERTIES 可用於新增表的其它屬性,一般是鍵值對形式;
⑨ AS 後面接的是查詢語句,根據查詢結果建立表;
⑩ LIKE 後接表名,複製表結構,但不復制資料。
修改表
-- 更新列
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name
column_type [COMMENT col_comment] [FIRST|AFTER column_name]
-- 增加和替換列
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT
col_comment], ...)
ADD 是代表新增一欄位,欄位位置在所有列後面(partition 列前);REPLACE 則是表示替換表中所有欄位。
刪除表
drop table table_name;
小結
本文主要展示了 hive 的 DDL 用法,包括資料庫和表的語法。實際上這裡面有部分內容是簡單概括,比如分割槽分桶表的含義作用以及用法,這些後面的文章我會展開描述,可以持續關注【大資料的奇妙冒險】,獲取更多知識!