Hadoop之Hive数据的导入与导出(DML)

Posted 柳小葱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop之Hive数据的导入与导出(DML)相关的知识,希望对你有一定的参考价值。

上一张章节我们已经讲完了数据库和表的增删改查,感兴趣的小伙伴可以点这里: Hadoop之Hive数据库和表的增删改查(DDL).
本章节将要学习对数据操作的DML,主要包括数据的导入和导出,清除。

1.数据导入

1.1向表中装载数据(load)

语法如下:

load data [local] inpath '数据的 path' [overwrite] into table student [partition (partcol1=val1,)];
--load data:表示加载数据
--local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表
--inpath:表示加载数据的路径
--overwrite:表示覆盖表中已有数据,否则表示追加
--into table:表示加载到哪张表
--student:表示具体的表
--partition:表示上传到指定分区
  • 导入数据

从本地导入数据(local)

--local表示数据在本机的系统中
load data local inpath '/opt/modul/hive/student.txt' into table student;

插入数据成功。
在这里插入图片描述
从HDFS上导入数据
我们将student数据放入根目录下,这样就在hdfs上了。
在这里插入图片描述
将该数据导入进student2表

load data inpath '/student.txt' into table student2;

导入成功:
在这里插入图片描述
我们发现根目录下的student.txt不见了
在这里插入图片描述
总结:在local导入数据是拷贝一份数据,而在hdfs上导入数据是剪切数据。

1.2 插入数据(insert)

  • 基本插入数据
--插入一条数据
insert into student values ("1006","BANZ");
  • 根据查询的结果插入
--将表student2查出的结果插入student中
insert into student select * from student2;

成功将student2表里的数据插入
在这里插入图片描述

  • 覆盖前表(overwrite)
--例子的写法
insert overwrite table student_par 
select id, name 
from student where month='201709';
--将student表的内容覆盖(删除原来的添加新的)
insert overwrite table student select * from student2;

成功覆盖student表。
在这里插入图片描述

1.3 查询语句中创建表并加载数据(As Select)

  • 这里是指创建表的同时,从加入数据(as select)
--创建表并添加数据
create table if not exists student3
as select id, name from student;

在这里插入图片描述

1.4 创建表时通过 Location 指定加载数据路径

  • 允许先建立数据再建立表(默认路径)
先在默认路径建立一个文件夹student4,在存放数据
hadoop fs -mkdir /user/hive/warehouse/student4
cd /opt/modul/hive/
hadoop fs -put student.txt /user/hive/warehouse/student4
然后在数据里建表
create table student4(id string,name string) row format delimited fields terminated by '\\t';

在这里插入图片描述
建表自带数据
在这里插入图片描述

  • 允许先建立数据再建立表(自定义路径)
我们在根目录建立一个文件夹studen5
hadoop fs -mkdir /student5
hadoop fs -put /opt/modul/hive/student.txt /student5
建表指定路径
create table if not exists student5 (id int, name string) row format delimited fields terminated by '\\t'
location '/student5';

在这里插入图片描述
建表成功,数据也存在。
在这里插入图片描述
通过location ‘/student5’ 即可指定数据的来源,但通常情况下来说,这种情况应该建立外部表,因为数据可能是其他人上载上来的,我们最好不要删除它。

2.数据导出

2.1 INSERT导出数据

导出表student2里面的数据到student文件夹

--导出表student2里面的文件到student文件夹
insert overwrite local directory '/opt/modul/hive/student' 
select * from student2;

数据文集已导出到student文件夹下
在这里插入图片描述
导出表student2里面的数据到student文件夹并以逗号分隔

--导出表student2里面的文件到student文件夹但是指定文件以逗号分隔符
insert overwrite local directory 
'/opt/modul/hive/student'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select * from student2;

在这里插入图片描述
导出表student2里面的数据到未创建的文件夹(需要取消local)

--suudent2文件夹并不存在,但是该语句会帮我们创建,并将数据放入其中
insert overwrite directory
'/student2'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select * from student2;

创建成功,文件也存在
在这里插入图片描述
在这里插入图片描述
通过hadoop命令直接下载

 dfs -get /user/hive/warehouse/student2/student.txt
/student2.txt;

Hive Shell 命令导出

一个覆盖 ; >>两个追加

 bin/hive -e 'select * from default.student2;' > /opt/module/hive/test.txt;

在这里插入图片描述
export命令导出
export 和 import 主要用于两个 Hadoop 平台集群之间 Hive 表迁移。

export table default.student2
to '/student';

export出的数据比普通导出的数据多了一个元数据文件,当导入该文件数据到其他地方时,需要用import
在这里插入图片描述
只有当student8不存在或者student8存在但是必须是空表

--将数据导入到student8中
import tabkle student8 from '/student';

导入成功
在这里插入图片描述

3.数据删除

Truncate 只能删除管理表中的数据,但表还在,这就是和drop的区别。不能删除外部表中数据,因为外部表连drop都不能删除HDFS上的数据,truncate肯定不能。

--删除表里面的数据
truncate table student;

数据存在,然后删除
在这里插入图片描述
删除后没了。
在这里插入图片描述

参考资料

《大数据Hadoop3.X分布式处理实战》

以上是关于Hadoop之Hive数据的导入与导出(DML)的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop之Hive的分区表

Hadoop之Hive查询语句

阿里云MaxComputer SQL学习之DML

Hadoop之Hive的排序

Hive——DML数据操作(数据导入&数据导出)

sqoop用法之mysql与hive数据导入导出#yyds干货盘点#