Hadoop之Hive数据的导入与导出(DML) 您所在的位置:网站首页 impala数据导入导出 Hadoop之Hive数据的导入与导出(DML)

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

2023-10-22 09:01| 来源: 网络整理| 查看: 265

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

目录 1.数据导入1.1向表中装载数据(load)1.2 插入数据(insert)1.3 查询语句中创建表并加载数据(As Select)1.4 创建表时通过 Location 指定加载数据路径 2.数据导出2.1 INSERT导出数据 3.数据删除参考资料

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分布式处理实战》



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有