①external关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(location)
[xiaokang@hadoop hive_data]$ hadoop fs -mkdir /stu
[xiaokang@hadoop hive_data]$ hadoop fs -put students.txt /stu
可以看到/stu路径下出来一个students.txt
hive (xiaoliu)> create external table student_ext(sno int,sname string,sex string,sage int,sdept string)
> row format delimited
> fields terminated by ','
> location '/stu';
hive (xiaoliu)> select * from student_ext;
OK
student_ext.sno student_ext.sname student_ext.sex student_ext.sage student_ext.sdept
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
95003 王敏 女 22 MA
95004 张立 男 19 IS
95005 刘刚 男 18 MA
95006 孙庆 男 23 CS
95007 易思玲 女 19 MA
95008 李娜 女 18 CS
95009 梦圆圆 女 18 MA
95010 孔小涛 男 19 CS
95011 包小柏 男 18 MA
95012 孙花 女 20 CS
95013 冯伟 男 21 CS
95014 王小丽 女 19 CS
95015 王君 男 18 MA
95016 钱国 男 21 MA
95017 王风娟 女 18 IS
95018 王一 女 19 IS
95019 邢小丽 女 19 IS
95020 赵钱 男 21 IS
95021 周二 男 17 MA
95022 郑明 男 20 MA
NULL NULL NULL NULL NULL
如上图所示,在默认路径下没有student_ext表,由此也可知student_ext为外部表
②hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
内部表:
#删除一个内部表t1
hive (xiaoliu)> drop table t1;
OK
Time taken: 0.468 seconds
如下图所示,可以看到,t1表以及其结构化数据文件都不见了
外部表:
#删除外部表student_ext
hive (xiaoliu)> drop table student_ext;
OK
Time taken: 0.153 seconds
在/stu路径下仍然存在student.txt
可以这样理解,内部表时受hive管理的表,外部表是不受hive管理的表
③like允许用户复制现有的表结构,但是不复制数据。
hive (xiaoliu)> select * from t_user;
OK
t_user.id t_user.name t_user.country
6 kongzi China
7 mozi China
8 laozi China
1 Allen US
2 Bob US
3 Tom US
hive (xiaoliu)> create table t_user_copy like t_user;
OK
Time taken: 0.085 seconds
hive (xiaoliu)> select * from t_user_copy;
OK
t_user_copy.id t_user_copy.name t_user_copy.country
Time taken: 0.159 seconds