hive内部表就是在create的时候,不加external,就是内部表,数据会复制到hive的warehouse里。html
hive外部表就是在create的时候,加上external,就是外部表。外部表分多种spa
有hbase的外部表。有文件系统的外部表,机理是差不错的。基于文件系统的外部表,必定要加location,不然的话会和内部表同样,会复制数据到warehouse。外部表在drop table的时候不会删除location下的数据,只会删除metastore中的表的数据。而内部表会删除全部东西,包括warehouse中的数据和metastore中的数据。htm
有一次drop一个外部表,可是在warehouse中仍是有表的数据,只是show tables时,没有显示表。这是由于我在create外部表的时候,忘记加上location。因此数据会复制到warehouse中,可是drop外部表的时候只会删除metastore中的数据。因此在warehouse中数据老是删除不掉。get
因此若是不加location,就不要加external关键字io
下面这篇文章讲的就是基于文件系统的外部表和内部表的区别,讲的很详细。注意,基于文件系统的外部表,必定要加location,不然的话会和内部表同样,会复制数据到warehouse。table
参考:hive内部表与外部表区别详细介绍ast