上一篇我们介绍了Hive导入数据的两种方式,本篇我们对Hive的表进行重点介绍。上一篇我们使用的都是Hive的内部表,如何区分Hive的内部表和外部表呢?create (external) table语句是否带有external关键字,如果带有external关键字就是外部表,所以上一篇我们导入的数据都是导入到Hive的内部表,也就是文件都存储在/hive/warehouse的HDFS目录中,即Hive默认配置的数据仓库。External Table允许我们将文件保存在任意的HDFS目录下,下面将详细介绍内部表和外部表的区别。
Hive内部表
|
|
Hive外部表
|
|
最后总结一下Hive内部表与外部表的区别:
- 在导入数据时,导入到内部表,数据文件是存储在Hive的默认的数据仓库下的。导入到外部表,数据文件是存储在External Table指定的Location目录下的。
- 在删除内部表时,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时,Hive仅仅删除外部表的元数据,数据是不会删除的。
如何选择使用哪种表呢?
- 如果所有的数据处理都需要由Hive完成,那么建议你应该使用内部表,如果所有的数据处理需要整合其他Application一起应用(例如:Flume负责采集数据文件,并且根据Header写入到HDFS的不同目录下的数据文件),此时建议使用外部表。
原文链接: