Hive 內錶和外表的區別

2021-07-10 19:23:59 字數 1332 閱讀 7827

原文**:

1.內部表

create table zz (name string , age string) location '/input/table_data';    

注:hive預設建立的是內部表

此時,會在hdfs上新建乙個zz表的資料存放地

load data inpath '/input/data' into table zz;    

會將hdfs上的/input/data目錄下的資料轉移到/input/table_data目錄下。

刪除zz表後,會將zz表的資料和元資料資訊全部刪除,即最後/input/table_data下無資料,當然/input/data下再上一步已經沒有了資料!

如果建立內部表時沒有指定location,就會在/user/hive/warehouse/下新建乙個表目錄,其餘情況同上。

注:load data會轉移資料

2

. 外部表

create external table et (name string , age string);    

會在/user/hive/warehouse/新建乙個表目錄et

load data inpath '/input/edata' into table et;    

把hdfs上/input/edata/下的資料轉到/user/hive/warehouse/et下

,刪除這個外部表後,/user/hive/warehouse/et下的資料不會刪除,但是/input/edata/下的資料在上一步load後已經沒有了!

資料的位置發生了變化!本質是load乙個hdfs上的資料時會轉移資料!

3. 小結

最後歸納一下hive中表與外部表的區別:

1、在匯入資料到外部表,資料並沒有移動到自己的

資料倉儲

目錄下(如果指定了location的話),也就是說外部表中的資料並不是由它自己來管理的!而內部表則不一樣;

2、在刪除內部表的時候,hive將會把屬於表的元資料和資料全部刪掉;而刪除外部表的時候,hive僅僅刪除外部表的元資料,資料是不會刪除的!

3. 在建立內部表或外部表時加上location 的效果是一樣的,只不過表目錄的位置不同而已,

加上partition用法也一樣,只不過表目錄下會有分割槽目錄而已,load data local inpath直接把本地檔案系統的資料上傳到hdfs上,有location上傳到location指定的位置上,沒有的話上傳到hive預設配置的資料倉儲中。

Hive建立內錶和外表的區別

內部表也稱為管理表或臨時表,hive控制著整個表的生命週期,預設存放目錄為 user hive warehouse,當刪除一張表的時候表中的資料也會相應的刪除。缺點 在實際開發中,內部表不方便和其他工作共享資料,hive在設計之初就不允許共享管理表中的資料,那應該如何來實現呢?hive提供了外部表。...

Hive內錶與外表的區別

一 區別 1 建立表結構 在hive裡面建立乙個表 hive create table wyp id int,name string,age int,tele string row format delimited fields terminated by t stored as textfile ...

mysql內錶和外表區別 Hive內錶和外表的區別

本文以例子的形式介紹一下hive內錶和外表的區別。例子共有4個 不帶分割槽的內錶 帶分割槽的內錶 不帶分割槽的外表 帶分割槽的外表。1 不帶分割槽的內錶 建立表 create table innertable id int,name string row format delimited field...