赞
踩
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] employee_external ( //EXTERNAL关键字添加为外部表
name string,
work_place ARRAY<string>,
sex_age STRUCT<sex:string,age:int>,
skills_score MAP<string,int>,
depart_title MAP<STRING,ARRAY<STRING>>
)
COMMENT 'This is an external table' //对表的注释
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|' //如何分隔列(字段)
COLLECTION ITEMS TERMINATED BY ',' //如何分隔集合和映射
MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE //文件存储格式
LOCATION '/user/root/employee'; // 数据存储路径(HDFS)
create external table if not exists test1(
id int,
name string
)
row format delimited
FIELDS TERMINATED BY ',';
load data local inpath '/data/test.txt' overwrite into table test1;
test1还在!
总结:外部表的删除,只会删除元数据,并不会删除数据本身
create table if not exists test2(
> id int,
> name string
> )
> row format delimited
> FIELDS TERMINATED BY ',';
load data local inpath '/data/test.txt' overwrite into table test2;
test2表不在了
总结:内部表的删除会将数据一起删除
1.未被external修饰的是内部表【managed table】,被external修饰的为外部表【external table】。
2.内部表数据由Hive自身管理,外部表数据由HDFS管理。
3.内部表数据存储在hive.metastore.warehouse.dir【默认:/user/hive/warehouse】,外部表数据存储位置由用户自己决定。
4.删除内部表会直接删除元数据【metadata】及存储数据,删除外部表仅仅删除元数据,HDFS上的文件不会被删除
在工作中,推荐使用外部表,如果操作失误,数据还可以保留,如果建表的时候建错了,可以通过以下命令将内部表转换成外部表
根据上述操作 test3 现在为外部表
先查看一下test3表的状态
执行命令
alter table test3 set tblproperties('EXTERNAL'='false');
再次查看test3状态
执行命令
alter table test3 set tblproperties('EXTERNAL'='true');
即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。