hive內部表、外部表區別自不用說,可實際用的時候還是要小心。
1. 內部表:
[sql]view plain
copy
?create
table tt (name string , age string) location '/input/table_data';
此時,會在hdfs上新建乙個tt表的資料存放地,例如,筆者是在 hdfs://master/input/table_data
上傳hdfs資料到表中:
[sql]view plain
copy
?load data inpath '/input/data'
into
table tt;
此時會將hdfs上的/input/data目錄下的資料轉移到/input/table_data目錄下。
刪除tt表後,會將tt表的資料和元資料資訊全部刪除,即最後/input/table_data下無資料,當然/input/data下再上一步已經沒有了資料!
如果建立內部表時沒有指定location,就會在/user/hive/warehouse/下新建乙個表目錄,其餘情況同上。
注意的地方就是:load data會轉移資料!
2. 外部表:
[sql]view plain
copy
?create external table et (name string , age string);
此時,會在/user/hive/warehouse/新建乙個表目錄et
[sql]view plain
copy
?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. 其他:
(1)加上location用法一樣,只不過表目錄的位置不同而已。
(2)加上partition用法也一樣,只不過表目錄下會有分割槽目錄而已。
(3)load data local inpath直接把本地檔案系統的資料上傳到hdfs上,有location上傳到location指定的位置上,沒有的話上傳到hive預設配置的資料倉儲中。
Hive內部表 外部表 區別
以下基於hive 2.0.0 snapshot,本人親自實驗的結論!新增欄位會導致表結構同時改變,與是否是外部表內部表無關,也與是否指定location無關!從本地load新分割槽的資料會導致表的分割槽資訊同時改變,與是否是外部表內部表無關,也與是否指定location無關!2 drop表時,如果是...
Hive內部表和外部表區別
建立內部表 建立 create table art inn sentence string row format delimited fields terminated by n 匯入 建立外部表 注意 外部表是在建立的時候定義實體資料的位置的,而且位置必須為資料夾,不能為檔案。1 匯入資料時 在匯...
hive內部表和外部表的區別 內部表和外部表
內部表 create table if not exists table name刪除表時,元資料與資料都會被刪除 外部表 create external table if not exists table name location hdfs path刪除外部表只刪除metastore的元資料,不...