Hive内部表和外部表
在hive中,表数据主要分为两种,
第一种:内部表
- 也叫管理表
- 表目录会创建在集群上的{hive .metastore.warehouse.dir}下的相应的库对应的目录中。
- 默认创建的表就是内部表
第二种:外部表
- 外部表需要使用关键字"external",
- 外部表会根据创建表时LOCATION指定的路径来创建目录,
- 如果没有指定LOCATION,则位置跟内部表相同,一般使用的是第三方提供的或者公用的数据。
- 建表语法:必须指定关键字external.
create external table tableName(id int ,name string)[location "path"];
create external table t_user7(
id int,
name string
)
row format delimited
fields terminated by ','
localtion '/publicData'
内部表和外部表转换:
内部表转外部表
alter table t_user6 set tblproperties('EXTERNAL'='TRUE');
注意:颞部表转外部表,true一定要大写
外部表转内部表
alter table t_user6 set set tblproperties('EXTERNAL'='FALSE');
说明:false不区分大小
两者之间的区别
-
创建时的差别
-
就差两个关键字,EXTERNAL和LOCATION
-
内部表 --CREATE TABLE T_INNER (ID INT); 外部表 --CREATE EXTERNAL TABLE T_OUTER(ID INT) LOCATION 'HDFS:///AA/BB/XX';
-
-
hive表创建时要做两件事
- 在hdfs下创建表目录
- 在元数据mysql创建相应表的描述数据(元数据)
-
drop时有不同的特性
- drop时,元素据都会被清除
- drop时,内部表的表目录会被删除,但是外部表的表目录不会被删除
-
使用场景
- 内部表:平时用来测试或者少量数据,并且自己可以随时修改删除数据.
- 外部表∶使用后数据不想被删除的情况使用外部表〈推荐使用)所以,整个数据仓库的最底层的表使用外部表