Hive 內部表與外部表

2021-09-29 15:03:02 字數 2291 閱讀 9086

首先檢視當前的表:

檢視emp表:

檢視這個emp表的詳細資訊:

可以看到table type是乙個managed_table,就是所謂的內部表

首先看一下mysql中的表:tbls

可以看到這個表tbl_typemanaged_table型別,檢視hdfs上的資料:

然後從hive中刪除這個表emp

刪除成功之後檢視hdfs中的資料emp

發現資料已經被刪除了。

此時,檢視mysql中的tbls資料,發現emp資料也被刪除了。

內部表被刪除之後,hdfs上的資料資訊被刪除,同時meta元資料資訊也被刪除。

hive>

create external table emp_external(empno int

, ename string, job string, mgr int

, hiredate string, sal double

, comm double

, deptno int

)row format delimited fields

terminated

by'\t' location '/external/emp/'

;

執行上面的sql,在hive中產生乙個外部表emp_external,檢視hdfs上的/external/emp

在hdfs中也有相應的目錄。

載入資料,load data local inpath '/home/iie4bu/data/emp.txt' overwrite into table emp_external;

在mysql中檢視元資料資訊:

可以看到這個表的tbl_typeexternal_table

然後我們在hive中刪除掉這個表emp_external

此時檢視mysql中的tbls元資料資訊是,已經沒有emp_external資訊了。

檢視hdfs中的資料:

發現資料還在。

內部表被刪除之後,hdfs上的資料資訊被刪除,同時meta元資料資訊也被刪除。

外部表被刪除之後,hdfs上的資料資訊不會被刪除,只刪除mysql中的元資料資訊。

外部表的資料安全性更好,刪除的只是元資料資訊,真正的資料並沒有被刪除,例如上面的emp_external被刪除了,但是如果重新執行建立這個表,不需要匯入資料,資料依然可以檢視:

因此在生產環境中,優先使用外部表。

hive內部表與外部表

假設已經進入hive的環境。有一張叫做test的表 內部表 外部表 未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 區別 內部表資料由hive自身管理,外部表資料由hdfs管理 內部表資料儲存的位置是hive.metas...

Hive內部表 外部表

內部表 外部表 未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 區別 內部表資料由hive自身管理,外部表資料由hdfs管理 內部表資料儲存的位置是hive.metastore.warehouse.dir 預設 user...

hive內部表與外部表入門

在hive中,表型別主要分為兩種,第一種 內部表 第二種 外部表 create external table tablename id int name string location path 內部表轉外部表 alter table tablename set tblproperties exte...