真实数据和元数据区分参考博文:https://blog.csdn.net/u010916338/article/details/90247121
一,内表
1,真实数据存放在hdfs上。
2,真实数据存放在hive默认创建的路径下。
如图所示stu就是内表。
3,内表一般都是先创建表再插入数据。
注:采用方式(1)插入数据,创建表不需要指定分割符: create table stu (id int,name string);
采用方式(2)和(3)插入数据,创建表必须指定分隔符:create table stu1(id int,name string) row format delimited fields terminated by ' ';
(1)insert into stu values(1,'zhang');
(2)从Linux服务器本地磁盘加载:load data local inpath '/home/software/2.txt' into table stu;
(3)不通过load 指令,可以直接向stu(表名)目录下上传一个文件,前提是分割符必须和创建表时指定的一样。思路有三:1,采用命令hadoop fs -put stu3.txt /user/hive/warehouse/park.db/stu 2,采用hdfs追加写入方式,Java和spark均可操作。3,使用flumesink落地到hdfs方式。
二,外表
1,真实数据存放在hdfs上。
2,但是真实数据没有存放在hive默认创建的路径下。
3,外表一般都是先有了外部数据,然后hive才创建表将其关联起来。
create external table stu (id int,name string) row format delimited fields terminated by ' ' location '/data';
注:这里的‘/data’一定是hdfs上的文件,因为外表只能关联hdfs上的文件。
注意事项:
内表删除时会删除真实数据,外表删除时不会删除真实数据。原因:内表真实数据存在于hive默认创建的路径下,此数据只有hive会用到,直接删除不影响其他模块使用(比如spark)。但是外表就不同,不单单只有hive使用,如果随意删除会影响其他模块使用。