hive内部表就是在create的时候,不加external,就是内部表,数据会复制到hive的warehouse里。
hive外部表就是在create的时候,加上external,就是外部表。外部表分多种
有hbase的外部表。有文件系统的外部表,机理是差不错的。基于文件系统的外部表,一定要加location,否则的话会和内部表一样,会复制数据到warehouse。外部表在drop table的时候不会删除location下的数据,只会删除metastore中的表的数据。而内部表会删除所有东西,包括warehouse中的数据和metastore中的数据。
有一次drop一个外部表,但是在warehouse中还是有表的数据,只是show tables时,没有显示表。这是因为我在create外部表的时候,忘记加上location。所以数据会复制到warehouse中,但是drop外部表的时候只会删除metastore中的数据。所以在warehouse中数据总是删除不掉。
所以如果不加location,就不要加external关键字
下面这篇文章讲的就是基于文件系统的外部表和内部表的区别,讲的很详细。注意,基于文件系统的外部表,一定要加location,否则的话会和内部表一样,会复制数据到warehouse。