您好,登錄后才能下訂單哦!
這篇文章主要介紹Hive中管理表、外部表、分區表的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
*管理表
--我們目前所創建的表都是管理表,也叫內部表
--Hive會控制管理表數據的生命周期,Hive默認會將表數據存儲在/user/hive/warehouse子目錄下
--刪除一個管理表時,Hive也會刪除這個表中數據
--管理表不方便和其他工具共享數據
eg:我們有一份由Pig或其他工具創建并且主要由這一工具使用的數據,同時我們還想使用Hive執行查詢,可以創建一個外部表指向這份數據,并不需要對其具有所有權
*外部表
--文件位于分布式文件系統的/data/test
eg:CREATE EXTERNAL TABLE IF NOT EXISTS app (
hour string,
name string,
pv string,
uv string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/data/test';
對以上語句分析:
1.關鍵字EXTERNAL告訴Hive這個表是外部表,LOCATION告訴Hive數據位于哪個路徑下
2.因為是外部表,所以Hive并非認為其完全擁有這份數據,刪除該表時并不會刪除這份數據,只會刪除描述表的元數據信息
*管理表VS外部表
--可以用 DESCRIBE EXTENDED tablename語句的輸出中查看到表是否是管理表或外部表
--對于管理表,可看到如下信息
... tableType:MANAGED_TABLE)
--對于外部表,可看到如下信息
... tableType:EXTERNAL_TABLE)
注:如果語句省略 EXTERNAL 關鍵字而源表是外部表的話,那么生成的新表也是外部表
如果語句省略 EXTERNAL 關鍵字而源表是管理表的話,那么生成的新表也是管理表
如果語句有EXTERNAL關鍵字而源表是管理表的話,那么生成的新表是外部表
*分區管理表
--管理表和外部表都可以加分區
eg:CREATE TABLE IF NOT EXISTS tmp.table1(
userId string COMMENT '用戶ID',
name string COMMENT '用戶姓名',
createtime string COMMENT '創建時間'
)
PARTITIONED BY (country string,state string );
--分區表改變了Hive對數據存儲的組織方式。如果我們在tmp庫下創建這個表,那么對于這個表只會有一個table1目錄與之對應:
/user/hive/warehouse/tmp/table1
但是,Hive在表目錄下將會建好可以反映分區結構的子目錄
eg:/table1/country=CA/state=AB
/table1/country=CA/state=BC
...
/table1/country=US/state=AL
/table1/country=US/state=AK
...
這些都是實際的目錄名稱,州目錄下將會包含有零個文件或者多個文件,這些文件中存放著那些州的用戶信息
分區字段一旦創建好,表現得就和普通字段一樣,除非優化查詢性能,否則不需要關心是否是分區字段
如果要查某個國家的用戶,那僅僅需要掃描那個國家對應的目錄就可以
--查看表中存在的所有分區
eg: hive> SHOW PARTITIONS table1;
country=CA/state=AB
country=CA/state=BC
...
country=US/state=AL
country=US/state=AK
...
查看某個特定分區
eg: hive> SHOW PARTITIONS table1 PARTITION(country='US');
country=US/state=AL
country=US/state=AK
...
*外部分區表
--創建外部分區表
eg: CREATE EXTERNAL TABLE IF NOT EXISTS app (
hour string,
name string,
pv string,
uv string)
PARTITIONED BY (timetype string,clct_day string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
--增加指定分區的值
eg: ALTER TABLE app ADD PARTITION (timetype=hour, clct_day='2018-07-26')
LOCATION '/data/test/table1/hour/'2018-07-26' ';
*自定義表的存儲格式
--Hive的默認存儲格式是文本文件格式,也可以用STORED AS TEXTFILE 指定,同時在創建表的時候指定各種分隔符
-- 使用TEXTFILE意味著每一行被認為是一個單獨的記錄
--也可以保存為其他Hive支持的文件格式,包括SEQUENCEFILE和RCFILE,這兩種文件格式都是使用二進制編碼和壓縮來優化磁盤空間使用以及I/O帶寬性能的
eg: CREATE TABLE IF NOT EXISTS tmp.table1(
userId string COMMENT '用戶ID',
name string COMMENT '用戶姓名',
createtime string COMMENT '創建時間')
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
以上是“Hive中管理表、外部表、分區表的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。