HIVE外部表 分區表
外部表
創建hive表,經過檢查發現TBLS表中,hive表的類型為MANAGED_TABLE.
在真實開發中,很可能在hdfs中已經有了數據,希望通過hive直接使用這些數據作為表內容。
此時可以直接創建出hdfs文件夾,其中放置數據,再在hive中創建表管來管理,這種方式創建出來的表叫做外部表。
#創建目錄,上傳已有文件
hadoop fs -mkdir /data
hadoop fs -put student.txt /datax/a.txt
hadoop fs -put student.txt /datax/b.txt
#在hive中創建外部表管理已有數據
create external table ext_student(id int ,name string) row format delimited fields terminated by '\t' location '/datax';
經過檢查發現可以使用其中的數據。成功的建立了一張外部表。
#vim ppp.txt
1 x
2 y
3 z
#hadoop fs - put peo.avi
再在該目錄下手動創建文件,能不能查詢出來呢?
發現是可以的。
不管是內部表還是外部表,新增的文件都可以自動被應用。
在刪除表時,內部表一旦刪除對應元數據和hdfs中的文件夾和文件都會被刪除。外部表只刪除元數據,對應的hdfs中的文件夾和文件不會被刪除。
分區表
hive也支持分區表
對數據進行分區可以提高查詢時的效率
普通表和分區表區別:有大量數據增加的需要建分區表
create table book (id bigint, name string) partitioned by (category string) row format delimited fields terminated by '\t';
在創建分區表時,partitioned字段可以不在字段列表中。生成的文件自動就會具有該字段。
分區表加載數據
load data local inpath './book_china.txt' overwrite into table book partition (category='china');
load data local inpath './book_us.txt' overwrite into table book partition (pubdate='2015-01-11');
select * from book;
select * from book where pubdate='2010-08-22';
經檢查發現分區也是一個目錄。
此時手動創建目錄是無法被hive使用的,因為元數據庫中沒有記錄該分區。
如果需要將自己創建的分區也能被識別,需要執行:
ALTER TABLE book add PARTITION (category = 'zazhi') location '/user/hive/warehouse/datax.db/book/category=zazhi';