首先檢視當前的表:
檢視emp表:
檢視這個emp表的詳細資訊:
可以看到table type
是乙個managed_table
,就是所謂的內部表
首先看一下mysql中的表:tbls
可以看到這個表tbl_type
是managed_table
型別,檢視hdfs
上的資料:
然後從hive中刪除這個表emp
刪除成功之後檢視hdfs
中的資料emp
:
發現資料已經被刪除了。
此時,檢視mysql中的tbls
資料,發現emp
資料也被刪除了。
內部表被刪除之後,hdfs上的資料資訊被刪除,同時meta元資料資訊也被刪除。
執行上面的sql,在hive中產生乙個外部表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/'
;
emp_external
,檢視hdfs上的/external/emp
:
在hdfs中也有相應的目錄。
載入資料,load data local inpath '/home/iie4bu/data/emp.txt' overwrite into table emp_external;
:
在mysql中檢視元資料資訊:
可以看到這個表的tbl_type
是external_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...