内部表创建方法:
create table student(
id int,
name string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
使用 desc formatted student; 查看表的描述信息,Table Type = MANAGED_TABLE ,说明该表为内部表
在准备hdfs的/opt/test 路径下student.txt 文件,内容如下
stendent.txt 文件内容
1,zhangsan
2,lisi
3,wangwu
接下来可以使用 loaddata 将本地文件或者hdfs中的文件导入到student表,
load data inpath '/opt/test/student.txt' into table student;
查询结果如下:
创建外部表:
首先在hdfs路径/opt/studnet路径下准备俩个文件student_1.txt和student_2.txt,如下:
#student_1.txt文件内容
1,zhangsan
2,lisi
3,wangwu
#student_2.txt文件内容
4,lucy
5,lili
创建外部表student_1
create external table student_1(
id int,
name string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
location '/opt/student';
desc formatted student_1(table type 为external_table)
select * from student_1 结果如下(/opt/student路径下的student_1.txt 和 student_2.txt 的文件数据被导入到student_1表中)
内部表和外部表的不同点:
1.内部表drop table会删除hdfs中的文件。外部表drop table 不会删除hdfs中的文件。
2.内部表load data 会移动将hdfs中的文件移动到hive默认的hdfs路径即:/user/hive/warehouse
外部表不会移动hdfs中的文件。
使用场景:
在hdfs中先有文件而后创建表,使用外部表。
先创建表而后在HDFS中有文件,使用内部表。