大資料(十九):hive資料庫基本操作與表分類
一、建立資料庫
1.建立一個數據,資料庫在HDFS上的預設儲存路徑是/user/hive/warehouse/*.db
create database db_hive;
2.避免建立的資料庫已經存在,增加if not exists
create database if not exists db_hive;
若果資料庫不存在則建立
3.建立一個數據庫,指定資料庫在HDFS上放置的位置
create database db_hive location "/";
二、修改資料庫
使用者可以使用ALTER DATABASE命令為某個資料庫的DBPROPERTIES設定鍵值對屬性值,來描述這個資料庫的屬性資訊。資料庫的其他元資料資訊都是不可更改的,包括資料庫名稱和資料庫所在目錄位置。
alter database db_hive set dbproperties('createtime'='20180921');
key和value都可以任意填寫僅僅是對資料庫的表述 並非實際的數值
使用以下命令檢視資料庫資訊:
desc database extended db_hive;
三、查詢資料庫
顯示資料庫
show databases;
過濾顯示查詢的資料庫
show databases lkie 'db_*';
使用資料庫
use db_hive;
四、刪除資料庫
刪除空資料庫
drop database db_hive;
強制刪除有資料的資料庫
drop database db_hive cascade;
刪除的時候也可以使用 if exists來判斷資料庫是否存在
drop database if exists db_hive;
五、建立表
1.建表語法
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]
2.欄位解釋說明
-
CREATE TABLE:建立一個指定名字的表。如果相同名字的表已經存在,則丟擲異常;使用者可以用IF NOT EXISTS選項來忽略這個異常。
-
EXTERNAL:關鍵字可以讓使用者建立一個外部表,在建表的同時指定一個指向實際資料的路徑(LOCATION),hive建立內部表時,會將資料移動到資料倉庫指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。
-
COMMENT:為表和列添加註釋
-
PARTITIONED BY:建立分割槽表
-
CLUSTERED BY:建立分桶表
-
SORTED BY:排序,幾乎不使用
-
ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[LINES TERMINATED BY char]|SERDE serde_name
[WITH SERDEPROPERTIES(property name=property value,proerty_name=property_value,...)]
使用者在建表的時候可以自定義SerDe或者使用自帶的SerDe。如果沒有指定ROW FORMAT或者ROW FORMAT DELIMITED,將會使用自帶的SerDe。在建表的時候,使用者還需要為表指定列,使用者在指定表的列的同時也會指定自定義的SerDe,hive通過SerDe確定表的具體的列和資料。
-
STORED AS指定儲存檔案型別
如果檔案資料是純文字,可以使用STORED AS TEXTFILE。如果資料需要壓縮,使用STORED AS SEQUENCEFILE。
常用的儲存檔案型別:
-
SEQUENCEFILE(二進位制序列檔案)
-
TEXTFILE(文字)
-
RCFILE(列式儲存格式檔案)
-
-
LOCATION:指定表在HDFS上的儲存位置
-
LIKE:允許客戶複製現有的表結構,但是不復制資料。
六、管理表
1.理論
預設建立的表都是所謂的管理表,有時也被稱為內部表。因為這種表,hive會或多或少控制著資料的生命週期。hive預設情況下會將這些表的資料儲存在由配置項定義的目錄的子目錄下(https://blog.csdn.net/qq_34886352/article/details/82790335)。當我們刪除一個管理表時,hive也會刪除這個表中資料。管理表不適合和其他工具共享資料。
2.例項
普通方式建立表
create table if not exists student(
id int,name String
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student';
根據查詢結果建立表(查詢的結果會新增到新建的表中)
create table if not exists student2
as select id,name from student;
根據已存在的表結構建立表
create table if not exists student3 like student;
查詢表的型別
desc formatted student;
MANAGED_TABLE表示管理表
七、外部表
1.理論
應為表是外部表,所以hive並非認為其完全擁有這份資料。刪除該表並不會刪除掉這份資料,不過表述表的元資料資訊會被刪除掉。
2.例項
建立一個外部表
create external table if not exists default.dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';
查看錶格式化資料
desc formatted dept;
EXTERNAL_TABLE表示外部表
八、管理表和外部表的使用場景:
外部表適用於需要和其他應用共享的檔案資料,比如每天收集到的網站日誌定期流入HDFS中的文字檔案。內部表適用於獨立使用的資料,比如中間表、結果表。