关于库的操作
-
创建库
create database if not exists 数据库名;
创建的数据库存放在hive默认的仓库里面(该仓库的位置在当时安装hive的时候指定的位置,在/hive/conf目录下的hive-site.xml里查看)
-
查看库
show current_database(); -
删除库
# 如果是空的数据库,直接可以删除
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仓库该表的目录下会存在该文件。
总结
-
外部表的创建在hive默认的仓库路径下是没有该表信息,只是连接HDFS上的数据文件。
内部表的创建在hive默认的仓库路径下是存在该表信息,且会在该表目录下存放数据文件。 -
外部表连接的数据文件依然存放在该文件的HDFS目录下。
内部表的数据文件存放在hive仓库下该表的目录下。 -
删除外部表,不会删除数据文件。
删除内部表,会删除数据文件。 -
创建外部表最好指定locaiton。
创建内部表不用指定location。 -
外部表连接的HDFS目录下若是新增了数据文件,则会同步到外部表。
内部表需要导入新增的数据文件,才会同步到内部表。