一.内部表和外部表的区别
1.表的存储位置
- 内部表存在hdfs指定位置(/user/hive/warehouse/),而且内部表的数据不共享数据;
- 外部表存在外部(共享数据),可以通过外部工具查看,例如sqlyog等等(创建外部表时需要指定位置,也可以不指定放在默认位置)
2.在删除表的操作上
- 内部表删除时,表的元数据(mysql)以及hdfs上的数据(原始数据)一并删除;
- 外部表删除时,只删除表的结构(元数据),并没有清除存放在hdfs上的数据(原始数据)
外部表相对生产环境来说更加安全些,数据组织也更加灵活,方便共享源数据,而且节省HDFS的内存,加快MapReduce处理速度
二.动手实践
1.创建一个带有分区的内部表
注:内部表的数据默认放在hdfs的/user/hive/warehouse目录下
create table name_map2(name string,info map<string,string>) row format delimited fields terminated by ‘\t’ collection items terminated by ‘,’ map keys terminated by ‘:’;
2.创建一个外部表
create external table name_map1(name string,info map<string,string>) row format delimited fields terminated by ‘\t’ collection items terminated by ‘,’ map keys terminated by ‘:’ location ‘hdfs://ip:host/name_map1’;
3.分别删除内部表和外部表
4.内外部表转换
|