hive外部表和内部表的区别


关于库的操作

  1. 创建库
    create database if not exists 数据库名;
    创建的数据库存放在hive默认的仓库里面(该仓库的位置在当时安装hive的时候指定的位置,在/hive/conf目录下的hive-site.xml里查看)
    在这里插入图片描述

  2. 查看库
    show current_database();

  3. 删除库
    在这里插入图片描述

# 如果是空的数据库,直接可以删除
drop database student1029;  

#如果数据库中有表,想要直接删除只能加关键字【cascade】暴力删除
drop database student1029 cascade;

在这里插入图片描述
4. 切换库
use 数据库名称;

关于外部表和内部表的操作

1. 创建外部表【一般HDFS上先有公用数据,再创建外部表进行连接】external

create external table mystu(id int,name string,gender string,age int,department string) row format delimited fields terminated by “,” lines terminated by “\n” location “/student1029/input”;
【location】:跟的是HDFS目录,而不是具体的文件。
在这里插入图片描述
外部表只是连接HDFS目录中的文件,在hive默认的仓库里面是没有该文件的。
在这里插入图片描述
desc formatted mystu;
查看mystu表的元数据信息,可以看到位置是在HDFS目录里。
在这里插入图片描述

2. 创建内部表【一般先创建表,不指定路径,再导入数据】

create table innerstu(id int,name string,gender string,age int,department string) row format delimited fields terminated by “,” lines terminated by “\n”;

创建的内部表默认是存放在hive的仓库里面。
在这里插入图片描述
在这里插入图片描述
创建出来的表是一张空表,没有数据的。
在这里插入图片描述
导入数据
load data local inpath “/home/hadoopUser/students.txt” into table innerstu;
这里导入数据的方法选择的是从本地linux导入,上传students.txt文件到innerstu表目录下。
在这里插入图片描述
导入数据后,在HDFS上的hive仓库该表的目录下会存在该文件。
在这里插入图片描述

总结

  1. 外部表的创建在hive默认的仓库路径下是没有该表信息,只是连接HDFS上的数据文件。
    内部表的创建在hive默认的仓库路径下是存在该表信息,且会在该表目录下存放数据文件。

  2. 外部表连接的数据文件依然存放在该文件的HDFS目录下。
    内部表的数据文件存放在hive仓库下该表的目录下。

  3. 删除外部表,不会删除数据文件。
    删除内部表,会删除数据文件。

  4. 创建外部表最好指定locaiton。
    创建内部表不用指定location。

  5. 外部表连接的HDFS目录下若是新增了数据文件,则会同步到外部表。
    内部表需要导入新增的数据文件,才会同步到内部表。

发布了56 篇原创文章 · 获赞 34 · 访问量 3666

猜你喜欢

转载自blog.csdn.net/MicoOu/article/details/103387658