一、Hive库操作
1.创建数据库
create database bigdata32;
标准写法:create database if not exists databases;(判断是否存在,无论存不存在都不会报错)
2.创建数据库和位置
create database bigdata32_test location '/bigdata32ligang.db';
3.修改数据库
注意:数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。
alter database dept set dbproperties('createtime'='20220531');更改创建时间
4.数据库的详细信息
1.显示数据库
show databases;
2.通过like进行过滤
show databases like 't*';
3.查看数据库详情
desc database bigdata32;
4.切换数据库
use bigdata32;
5.删除数据库
drop database bigdata_test;
使用判断
drop database if exists bigdata32_test;
注意:上面两种写法只有当数据库为空的时候才能删除
当数据库不为空时:
drop database if exists bigdata32_test cascade;
二、Hive的数据类型
基础数据类型
BIGINT:占四位,64位有符号整型。取值范围:-2 63 +1~2 63 -1。
DECIMAL:10进制精确数字类型。precision:表示最多可以表示多少位的数字。取值范围:1 <= precision <= 38。scale:表示小数部分的位数。取值范围: 0 <= scale <= 38。如果不指定以上两个参数,则默认为decimal(10,0)。
STRING:字符串类型
复杂数据类型
ARRAY:arrayarray<struct<a:int, b:string>> MAP:map<string, string>
map<smallint, array
三、Hive的表操作
1.Hive的存储格式
Hive的存储格式:
Hive没有专门的数据文件格式,常见的有以下几种:
TEXTFILE正常的文本格式,最常用的格式
SEQUENCEFILE
AVRO
RCFILE
ORCFILE
PARQUET
ORCFILE存储文件读操作效率最高
ORCFILE存储文件占用空间少,压缩效率高
2.创建表
1.使用默认建表方式
create table IF NOT EXISTS students
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED ',';//必选,指定分隔符
2.指定location
create table IF NOT EXISTS students2
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/bigdata27/input1';
3.指定存储格式
create table IF NOT EXISTS test_orc_tb
(
id bigint,
name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORC
LOCATION '/bigdata29/out6'; //设置存储的格式为orcfile,如果不指定存储格式,默认都是textfile
4.只想建表,不想加载数据的,仿造其他数据表
create table students5 like students;
5.先创建一个空表,再通过insert into插入数据
3.加载数据
1、使用hdfs dfs -put '本地数据' 'hive表对应的HDFS目录下'
再进行查询
2.通过sql语句将文件传入hdfs上
load data local inpath '/usr/local/soft/bigdata32/data/student.txt' into table students4;
这里inpath的路径必须是master上的文件的路径
// overwrite 覆盖加载,将文件以覆盖的方式加载进去
load data local inpath '/usr/local/soft/data/students.txt' overwrite into table students;
3、create table xxx as SQL语句
创建表的同时将数据传入进去
4、insert into table xxxx SQL语句 (没有as)
当表存在的时候将查询的数据插入进去
Hive内外部表
面试题:内部表和外部表的区别?如何创建外部表?工作中使用外部表
1.hive内部表
当创建好表的时候,HDFS会在当前表所属的库中创建一个文件夹
当设置表路径的时候,如果直接指向一个已有的路径,可以直接去使用文件夹中的数据
当load数据的时候,就会将数据文件存放到表对应的文件夹中
而且数据一旦被load,就不能被修改
我们查询数据也是查询文件中的文件,这些数据最终都会存放到HDFS
当我们**删除表的时候,表对应的文件夹会被删除,同时数据也会被删除
默认建表的类型就是内部表
// 内部表
create table students_internal
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input2';
2.外部表
create external table students_external
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input3';