大数据入门hive基础学习
1、创建数据库
create database mydb;
重点语句:
create database if no exists mydb;
create database if no exists mydb location "/aa/bb";
在创建hive的库的时候,要注意:其实可以指定该数据库的数据存储目录在HDFS的那个目录
hive的底层数据/真实数据存储在hdfs上
hive的元数据/描述数据存储在mysql中
使用hive创建了一张表,这张表一定是属于一个数据库的,那么这张表当然也有自己的HDFS数据存储目录
创建表可以指定目录
创建库也可以指定目录
可以使用location的语法来指定创建库和创建表的时候的数据存储目录
使用频率很低
2、查询数据库
两个需求:
1、我想知道hive中到底有那些数据库?
2、我想知道某一个数据库的详细的信息?
3、这个数据库是怎么创建的呢
查询库列表:show databases;
查询库详细信息:desc database [extended] mydb;
查询建库的详细信息:show create database mydb;
关于location指定数据库和数据表的存储目录的问题:
规格:
hdfs_schema/hive的默认仓库路径/数据库.db/数据表/文件
hdfs://hadoop02:9000/user/hive/warehouse/myhive.db/student/student.txt
hdfs_schema hdfs://hadoop02:9000
hive的默认仓库路径 /user/hive/warehouse/
数据库.db /myhive.db/
数据表 /student/
数据文件 /student.txt
数据文件不一定是txt,可以任意格式的数据
1、普通文本文件
txt,csv,tsv 解析的时候记得指定行和列的分隔符
2、常见的行式,列式存储文件
parquet,rcfile,orcfile
3、企业常用
json
4、hadoop支持的数据格式
sequencefile
5、压缩文件
压缩普通文本文件
3、删除数据库
drop database mydb;
核心重点:
drop database if exists mydb;
drop database if exists mydb [restrict|cascade];
是否级联删除
1、默认是:restrict 严格模式,不级联删除
如果库中有表存在,也不删除该库
2、casecade
如果这个数据库中还有数据表存在,但是也一并删除
4、先进入我们要操作的数据库/切换库
use mydb;
5、查看数据库里面的表
show tables;
show tables in mydb;
6、添加表 / 创建表
表有四种表:
1、内部表
2、外部表
3、分区表
4、分桶表
关系:
1、一张表如果是内部表了,就不是外部表
一张表如果是外部表了,就不是内部表
2、如果一张表是内部表,但是同时也可以是分区表和分桶表
总结:
1、普通的内部表
2、普通的外部包
3、普通的分区表
4、普通的分桶表
5、分区的内部表
6、分区的外部表
7、分桶的内部表
8、分桶的外部表
9、既分区,又分桶的内部表
10、既分区,又分桶的外部表
创建内部表(Managered_Table)
create table mingxing_mng(id int, name string, sex string, age int,department string) row format delimited fields terminated by ',';
show create table mingxing;
创建外部表(External_Table)
create external table mingxing_ext(id int, name string, sex string, age int, department string) row format delimited fields terminated by ',' location '/home/hadoop/hivedata';
注意:创建外部表的时候指定location的位置必须是目录,不能是单个文件
小总结:
1、创建内部表:
create table table_name ()
2、创建外部表:
create external table_name ()
怎么选择到底是创建内部表和外部表呢?
1、他们的区别
内部表删除的时候,会删除真实数据,和元数据
但是
外部表删除的时候,只会删除元数据,不会删除真实数据
2、如果现在有一份数据已经存在了HDSF上的某个目录,而且不是谁谁一个人在用
那么创建这个表的时候,要创建成外部表,而且创建表的时候要指定location
不管是内部表,还是外部表,数据都是存储在HDFS上的。不是在linux当中。
具体的案例:
1、创建内部表
create table mingxing(id int, name string, age int) row format delimited fields terminated by ",";
2、创建外部表
操作步骤:
先创建一个文件