Hive 内部表与外部表
首先查看當前的表:
內部表
查看emp表:
查看這個emp表的詳細信息:
可以看到Table Type是一個MANAGED_TABLE,就是所謂的內部表
內部表跟外部表有什么區別
首先看一下mysql中的表:TBLS
可以看到這個表TBL_TYPE是MANAGED_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_TYPE是EXTERNAL_TABLE。
然后我們在hive中刪除掉這個表emp_external,
此時查看mysql中的TBLS元數據信息是,已經沒有emp_external信息了。
查看HDFS中的數據:
發現數據還在。
區別
內部表被刪除之后,HDFS上的數據信息被刪除,同時Meta元數據信息也被刪除。
外部表被刪除之后,HDFS上的數據信息不會被刪除,只刪除Mysql中的元數據信息。
外部表的數據安全性更好,刪除的只是元數據信息,真正的數據并沒有被刪除,例如上面的emp_external被刪除了,但是如果重新執行創建這個表,不需要導入數據,數據依然可以查看:
因此在生產環境中,優先使用外部表。
總結
以上是生活随笔為你收集整理的Hive 内部表与外部表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hive DML操作
- 下一篇: Hive 分区表