4.2.4.外部表操作
在创建表的时候可以指定external关键字创建外部表,外部表对应的文件存储在location指定的hdfs目录下,向该目录添加新文件的同时,该表也会读取到该文件(当然文件格式必须跟表定义的一致)。
 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive外部表的时候,数据仍然存放在hdfs当中,不会删掉。
 4.2.4.1.数据装载载命令Load
 Load命令用于将外部数据加载到Hive表中
 语法:
 load data [local] inpath ‘/export/data/datas/student.txt’ [overwrite] | into table student [partition (partcol1=val1,…)];
 参数:
 1、load data:表示加载数据
 2、local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
 3、inpath:表示加载数据的路径
 4、overwrite:表示覆盖表中已有数据,否则表示追加
 5、into table:表示加载到哪张表
 6、student:表示具体的表
 7、partition:表示上传到指定分区
4.2.4.2.操作案例
 分别创建老师与学生表外部表,并向表中加载数据
 源数据如下:
 student.txt
 01 赵雷 1990-01-01 男
 02 钱电 1990-12-21 男
 03 孙风 1990-05-20 男
 04 李云 1990-08-06 男
 05 周梅 1991-12-01 女
 06 吴兰 1992-03-01 女
 07 郑竹 1989-07-01 女
 08 王菊 1990-01-20 女
teacher.txt
 01 张三
 02 李四
 03 王五
1、创建老师表:
 create external table teacher (tid string,tname string) row format delimited fields terminated by ‘\t’;
 2、创建学生表:
 create external table student (sid string,sname string,sbirth string , ssex string ) row format delimited fields terminated by ‘\t’;
 3、从本地文件系统向表中加载数据
 load data local inpath ‘/export/data/hivedatas/student.txt’ into table student;
 4、加载数据并覆盖已有数据
 load data local inpath ‘/export/data/hivedatas/student.txt’ overwrite into table student;
5、从hdfs文件系统向表中加载数据
 其实就是一个移动文件的操作
 需要提前将数据上传到hdfs文件系统,
 hadoop fs -mkdir -p /hivedatas
 cd /export/data/hivedatas
 hadoop fs -put teacher.txt /hivedatas/
 load data inpath ‘/hivedatas/teacher.txt’ into table teacher;
注意,如果删掉teacher表,hdfs的数据仍然存在,并且重新创建表之后,表中就直接存在数据了,因为我们的student表使用的是外部表,drop table之后,表当中的数据依然保留在hdfs上面了










