表类型详解
表分类
在Hive中,表类型主要分为两种
第一种:内部表
- 也叫管理表
- 表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中。
- 默认创建的表就是内部表
第二种:外部表
- 外部表需要使用关键字"external",
- 外部表会根据创建表时LOCATION指定的路径来创建目录,
- 如果没有指定LOCATION,则位置跟内部表相同,一般使用的是第三方提供的或者公用的数据。
- 建表语法:必须指定关键字external。
create external table tableName(id int,name string) [location ‘path’];
-- 语法:
create external table 表名(
列名 列的数据类型,
....
列名 列的数据类型
)comment '表的描述信息(可以选型添加)'
row format delimited fields terminated by '文件数据一行的内容是以什么方式分隔的'
row format delimited lines terminated by '文件数据中每一行的分隔符什么'
[location 'path路径']
stored as textfile -- 提供映射数据文件的文件格式【默认是文本文件可以不写】
create external table u7(
id int,
name string
)row format delimited fields terminated by ','
location '/publicData';
内部表和外部表转换
内部表转外部表
-- 语法:
alter table 内部表名 set tblproperties('EXTERNAL'='TRUE');
-- 注意: 内部表转换为外部表时,提供true必须大写
外部表转内部表
-- 语法:
alter table 外部表名 set tblproperties('EXTERNAL'='false');
-- 注意: 外部表转内部表的时候,false不需要大写(不区分大小写)
两者之间区别
1) 内部表和外部表在创建时的差别
就差两个关键字,EXTERNAL 和 LOCATION
举例:
- 内部表 -- CRAATE TABLE T_INNER(ID INT);
- 外部表 -- CREATE EXTERNAL TABLE T_OUTER(ID INT) LOCATION 'HDFS:///AA/BB/XX';
2) Hive表创建时要做的两件事:
-
在hdfs下创建表目录
-
在元数据库mysql创建相应表的描述数据(元数据)
3) drop时有不同的特性:
1、drop时,元数据都会被清除
2、drop时,内部表的表目录会被删除,但是外部表的表目录不会被删除。
4) 使用场景
内部表: 平时用来测试或者少量数据,并且自己可以随时修改删除数据.
外部表:使用后数据不想被删除的情况使用外部表(推荐使用)所以,整个数据仓库的最底层的表使用外部表