需启动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; # 可以查看数据库的详细信息

create

创建表后Hive默认会在HDFS的warehouse文件夹中创建文件夹curd.db/,将来可以直接拷贝数据文件到该目录下的相关表进行数据填充。

查看HDFS

hdfs dfs -ls -R /user/hive/

ls

显示数据库

使用命令查看所有数据库

show databases;

show

查看数据库的描述与详细(extended)描述

desc database curd; # 查看描述
desc database extended curd; # 查看详细描述

desc

修改数据库描述

数据库的名称和所在位置等不可修改,但可以添加/修改描述数据库的键值对。

alter database curd set dbproperties('createtime'='20220501');

alter

删除数据库

删除数据库前最好判断该数据库是否存在

drop database if exists curd;

drop

数据库不为空时需要强制删除:使用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;

select

如果在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;

hdfs-import

插入数据至内部表

首先使用自定义分隔符创建内部表

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;

select

删除内部表

内部表删除后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;

select

此外,还可以在创建表之后修改外部表文件夹 alter table student set location '/hive_ext_student';

删除外部表

删除外部表不会删除HDFS中的文件

同删除内部表

drop table student;

但通过查看HDFS,文件还存在

hdfs dfs -ls -R /hive_ext_student

ls

内/外部表转换

外转内:

alter table student set tblproperties ('EXTERNAL'='FALSE');

转换后删除该内部表,HDFS中的目录会被同步删除。

内转外:

alter table student set tblproperties ('EXTERNAL'='TRUE');

转换后删除该外部表,HDFS中的目录会保留。

查询表详情

desc formatted tab;

desc