標籤:
hive內部表、外部表格區別自不用說,可實際用的時候還是要小心。
1. 內部表:
[sql] view plaincopyprint?
- create table tt (name string , age string) location ‘/input/table_data‘;
此時,會在hdfs上建立一個tt表的資料存放地,例如,筆者是在 hdfs://master/input/table_data
上傳hdfs資料到表中:
[sql] view plaincopyprint?
- 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 plaincopyprint?
- create external table et (name string , age string);
此時,會在/user/hive/warehouse/建立一個表目錄et
[sql] view plaincopyprint?
- 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內部表、外部表格