測試一下,放三個檔案到hdfs中
hdfs dfs -mkdir /input
hdfs dfs -put student01.txt /input
hdfs dfs -put student02.txt /input
hdfs dfs -put student03.txt /input
現在建立乙個外部表來指向這三個檔案
create external table external_student
(sname string, age int)
row format delimited fields terminated by ','
location '/input';
發現這張表把元資料資訊存放在mysql中,在hdfs上並沒有任何資料的資訊
hdfs dfs -rm /input/student03.txt
發現外部表查詢資料也減少了
建立內部表
create table internal_student
(sname string, age int)
row format delimited fields terminated by ','
location '/input';
這種情況下,發現與外部表的情況是相同的
1. 並沒有在hdfs下建立表
2. 刪除hdfs中的資料,其查詢的結果也沒有了
但是當我刪除內部表的時候,資料被刪除了
如果load的時候,使用內部表load
create table internal_student2
(sname string, age int)
row format delimited fields terminated by ',';
load data inpath '/input/student01.txt' overwrite into table internal_student2
這句的結果是:
而
資料檔案只有乙份,會被傳來傳去
如果想生成乙份資料,而不要傳來傳去,那麼通過select+insert來進入內部表
insert into table internal_student select sname, age from internal_student2;
其會啟動乙個mr的程式,生成結果放到/input下
1. 刪除內部表會直接刪除元資料及儲存資料,刪除外部表僅僅會刪除元資料
2. 內部表資料由hive自身管理(因為內部表資料會放到hdfs hive相關目錄下),而外部表資料仍然是放在hdfs上的,由hdfs自己管理
hive 內部表與外部表的區別
本文以例子的形式介紹一下hive內錶和外表的區別。例子共有4個 不帶分割槽的內錶 帶分割槽的內錶 不帶分割槽的外表 帶分割槽的外表。1 不帶分割槽的內錶 建立表 create table innertable id int,name string row format delimited field...
hive 內部表與外部表的區別
hive 內部表 hive create table soyo55 name string,addr string,money string row format delimited fields terminated by stored as textfile hive load data loc...
Hive內部表 外部表區別
hive內部表 外部表區別自不用說,可實際用的時候還是要小心。1.內部表 sql view plain copy print create table tt name string age string location input table data 此時,會在hdfs上新建乙個tt表的資料存放...