提示:文章内容很详细,案例仅供参考!
目录
前言
文章由Hive对库的操作和Hive对表的操作两部分组成。
一.Hive对库的操作
1.创建库
先打开node01,进入hive
代码:hiveserver2
代码:beeline -u 'jdbc:hive2://192.168.67.110:10000' -n root
(1)简单方式
代码:create database t2;
show databases;
(2)创建库的时候带注释
代码:create database if not exists t2 comment 'learning hive';
desc database extended t2;
(3)创建带属性的库。
代码:create database if not exists t2 with dbproperties('creator'='hadoop','date'='2022-10-21');
desc database extended t2;
2.查看库
(1)最常用查看库方式。
代码:show databases;
(2)显示数据库的详细属性信息。
代码:desc database t2;
desc database extended t2;
(3)查看正在使用哪个库。
代码:select current_database();
代码: use t2;
select current_database();
3.删除库
默认情况下,hive 不允许删除包含表的数据库。需要使用cascade 关键字。
代码:drop database if exists t2 cascade;
show databases;
4.切换库
切换到t2数据库。
代码:use t2;
select current_database();
二.Hive对表的操作
1.内部表与外部表
(1)内部表
表目录hive会自动创建在默认的HDFS目录下/user/hive/warehouse/…。
代码:create table worker_1(id int,name string,salary bigint,addr string)
row format delimited
fields terminated by ‘,’;
(2)外部表
创建的时候,需要使用external关键字,并指定表对应hdfs上的目录/aa/bb。
代码:create external table worker_2(id int,name string,salary bigint,addr string)
row format delimited
fields terminated by ‘,’
location ‘/worker’;
drop一个内部表时,表的元信息和表数据目录都会被删除。
drop一个外部表时,只删除表的元信息,表的数据目录不会被删除。
外部表的意义
通常,一个数据仓库系统,数据总有一个源头,而源由一般是别的应用程序产生的,其目录无法确定,为了方便映射,就可以在hive中用外部表映射。并且,就算hive中把这个表删了,也不会删除数据目录,就不会影响到别的应用系统。
2.数据的导入导出
(1)导入
将hive服务器运行所在节点的本地磁盘上的文件导入表中。
注意:
这里load的文件是在开启server的节点上。不是在客户端节点上。
我们编辑的数据如果有中文,必须得是UTF-8编码格式,否则数据会出现乱码现象。
load data local inpath '/usr/datadir/worker_1.txt' into table worker_1;
加overwrite可以实现覆盖,不加overwrite是追加到表后面。
load data local inpath ‘/usr/datadir/worker_1.txt’ overwrite into table worker_1;
将hdfs上的文件导入表中。
上传文件到HDFS。
load data inpath '/worker_2' into table worker_2;
会发现hdfs上的/worker_2被移动到表目录下。
加local是复制,不加是移动。
从别的表查询数据后插入到一张新建的表中。表会自动生成。
create table worker_3
as
select id,name,salary
from worker_2
where salary>=5000;
可以看到我们写的HQL被转化为MapReduce程序运行。
从别的表查询数据后插入到一张已经存在的表中。表已经存在。
insert into table worker_1
select id,name,salary,addr
from worker_2
where salary>=4000;
into替换为overwrite,会覆盖掉原表得数据。
(2)导出
将数据从hive的表中导出到hdfs的目录中
insert overwrite directory ‘/worker_dir’
select * from worker_1;
将数据从hive的表中导出到本地磁盘的目录中
insert overwrite local directory ‘/usr/datadir/worker.log’
select * from worker_1;