需启动Hadoop
cd /opt/hadoop/sbin
./start-all.sh
并进入Hive命令行
cd /opt/hive/bin
./hive
创建数据库
create database curd;
# create database if not exists curd;
show databases;
# desc database extended curd; # 可以查看数据库的详细信息
创建表后Hive默认会在HDFS的warehouse文件夹中创建文件夹curd.db/,将来可以直接拷贝数据文件到该目录下的相关表进行数据填充。
查看HDFS
hdfs dfs -ls -R /user/hive/
显示数据库
使用命令查看所有数据库
show databases;
查看数据库的描述与详细(extended)描述
desc database curd; # 查看描述
desc database extended curd; # 查看详细描述
修改数据库描述
数据库的名称和所在位置等不可修改,但可以添加/修改描述数据库的键值对。
alter database curd set dbproperties('createtime'='20220501');
删除数据库
删除数据库前最好判断该数据库是否存在
drop database if exists curd;
数据库不为空时需要强制删除:使用cascade命令
drop database curd cascade;
创建内部表
内部表又称管理表
首先应使用数据库,再创建表
use curd;
create table tab(line string); # 仅有一列,string类型
导入数据至内部表
Hive可以从本地文件系统和HDFS中的文件导入数据。
比如root目录下有1.txt,内容为
aa
bb
cc
aa
bb
aa
bb
可以在Hive命令行中导入:
load data local inpath '/root/1.txt' into table curd.tab;
导入后即可查询
use curd;
select * from tab;
如果在HDFS中有文件/1.txt,内容同上
# 上传本地文件至HDFS*
hdfs dfs -put /root/1.txt /
在Hive命令行中导入:
load data inpath '/1.txt' into table curd.tab;
导入后即可查询,可以看到共导入1.txt共两次
use curd;
select * from tab;
插入数据至内部表
首先使用自定义分隔符创建内部表
create table student(id int, name string) row format delimited fields terminated by '\t';
插入数据
insert into student(id, name) values(1, 'zhangsan');
insert into student(id, name) values(2, 'lisi');
insert into student(id, name) values(3, 'wangwu');
查看数据
select * from student;
删除内部表
内部表删除后HDFS中的对应文件也会被删除
drop table student;
创建外部表
上面已经删除了内部表student,这里创建外部表student
在HDFS中的/hive_ext_student中有student.txt
1 aaa
2 bbb
3 ccc
4 zhangsan
5 lisi
# 上传至HDFS
hdfs dfs -mkdir /hive_ext_student
hdfs dfs -put /root/student.txt /hive_ext_student
创建表,设置分隔符为\t
,设置外部表文件夹为/hive_ext_student
create external table student(id int, name string) row format delimited fields terminated by '\t' location '/hive_ext_student';
此时就可以查看数据了
select * from student;
此外,还可以在创建表之后修改外部表文件夹
alter table student set location '/hive_ext_student';
删除外部表
删除外部表不会删除HDFS中的文件
同删除内部表
drop table student;
但通过查看HDFS,文件还存在
hdfs dfs -ls -R /hive_ext_student
内/外部表转换
外转内:
alter table student set tblproperties ('EXTERNAL'='FALSE');
转换后删除该内部表,HDFS中的目录会被同步删除。
内转外:
alter table student set tblproperties ('EXTERNAL'='TRUE');
转换后删除该外部表,HDFS中的目录会保留。
查询表详情
desc formatted tab;