內(nèi)部表與外部表的區(qū)別
未被external修飾的是內(nèi)部表(managed table),被external修飾的為外部表(external table)烁设;
區(qū)別:
內(nèi)部表數(shù)據(jù)由Hive自身管理鹏漆,外部表數(shù)據(jù)由HDFS管理;
內(nèi)部表數(shù)據(jù)存儲的位置是hive.metastore.warehouse.dir(默認(rèn):/user/hive/warehouse),外部表數(shù)據(jù)的存儲位置由自己制定(如果沒有LOCATION闹蒜,Hive將在HDFS上的/user/hive/warehouse文件夾下以外部表的表名創(chuàng)建一個文件夾,并將屬于這個表的數(shù)據(jù)存放在這里)抑淫;
刪除內(nèi)部表會直接刪除元數(shù)據(jù)(metadata)及存儲數(shù)據(jù)绷落;刪除外部表僅僅會刪除元數(shù)據(jù),HDFS上的文件并不會被刪除始苇;
對內(nèi)部表的修改會將修改直接同步給元數(shù)據(jù)砌烁,而對外部表的表結(jié)構(gòu)和分區(qū)進(jìn)行修改,則需要修復(fù)(MSCK REPAIR TABLE table_name;
內(nèi)部表與外部表互相轉(zhuǎn)換
內(nèi)部轉(zhuǎn)外部
alter table tableA set TBLPROPERTIES('EXTERNAL'='true')
外部轉(zhuǎn)內(nèi)部
alter table tableA set TBLPROPERTIES('EXTERNAL'='false')
如果想要刪除外部表的數(shù)據(jù)催式,那么函喉,需要轉(zhuǎn)成內(nèi)部表,再把表刪除荣月。