千家信息网

hive常用功能:Hive数据导入导出方式

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,作为数据仓库的Hive,存储着海量用户使用的数据。在平常的Hive使用过程中,难免对遇到将外部数据导入到Hive或者将Hive中的数据导出来。今天主要就来学习一下Hive的几种数据导入和导出的方式。一
千家信息网最后更新 2026年11月01日hive常用功能:Hive数据导入导出方式

作为数据仓库的Hive,存储着海量用户使用的数据。在平常的Hive使用过程中,难免对遇到将外部数据导入到Hive或者将Hive中的数据导出来。今天主要就来学习一下Hive的几种数据导入和导出的方式。

一、Hive数据导入方式

这里主要介绍四种:

从本地文件系统中导入数据到Hive表;

从HDFS上导入数据到Hive表;

从别的表中查询出相应的数据并导入到Hive表中;

在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。

1、从本地文件系统中导入数据到Hive表

基本语法:

load data local inpath 本地文件路径 into table Hive表名称;

先在Hive里面创建好表(demo是网上的),如下:

hive> create table wyp(id int, name string,age int, tel string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'STORED AS TEXTFILE;OKTime taken: 2.832 seconds

这个表很简单,只有四个字段,具体含义我就不解释了。本地文件系统里面有个/home/wyp/wyp.txt文件,内容如下:

[wyp@master ~]$ cat wyp.txt

1 wyp 25 13188888888888

2 test 30 13888888888888

3 zs 34 899314121

wyp.txt文件中的数据列之间是使用\t分割的,可以通过下面的语句将这个文件里面的数据导入到wyp表里面,操作如下:

hive> load data local inpath 'wyp.txt' into table wyp;Copying data from file:/home/wyp/wyp.txtCopying file: file:/home/wyp/wyp.txtLoading data to table default.wypTable default.wyp stats:[num_partitions: 0, num_files: 1, num_rows: 0, total_size: 67]OKTime taken: 5.967 seconds

这样就将wyp.txt里面的内容导入到wyp表里面去了,可以到wyp表的数据目录下查看,如下命令:

hive> dfs -ls /user/hive/warehouse/wyp ;

Found 1 items

-rw-r--r--3 wyp supergroup 67 2014-02-19 18:23 /hive/warehouse/wyp/wyp.txt

需要注意的是:

和我们熟悉的关系型数据库不一样,Hive现在还不支持在insert语句里面直接给出一组记录的文字形式,也就是说,Hive并不支持INSERT INTO …. VALUES形式的语句。

2、HDFS上导入数据到Hive表

基本语法:

load data inpath HDFS文件路径 into table Hive表名称;

从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/wyp/),然后再将数据从那个临时目录下移动(注意,这里说的是移动,不是复制!)到对应的Hive表的数据目录里面。既然如此,那么Hive肯定支持将数据直接从HDFS上的一个目录移动到相应Hive表的数据目录下,假设有下面这个文件/home/wyp/add.txt,具体的操作如下:

[wyp@master /home/q/hadoop-2.2.0]$ bin/hadoop fs -cat /home/wyp/add.txt

5 wyp1 23 131212121212

6 wyp2 24 134535353535

7 wyp3 25 132453535353

8 wyp4 26 154243434355

上面是需要插入数据的内容,这个文件是存放在HDFS上/home/wyp目录(和一中提到的不同,一中提到的文件是存放在本地文件系统上)里面,我们可以通过下面的命令将这个文件里面的内容导入到Hive表中,具体操作如下:

hive> load data inpath '/home/wyp/add.txt' into table wyp;Loading data to table default.wypTable default.wyp stats:[num_partitions: 0, num_files: 2, num_rows: 0, total_size: 215]OKTime taken: 0.47 seconds
hive> select * from wyp;OKwyp1    23      131212121212wyp2    24      134535353535wyp3    25      132453535353wyp4    26      154243434355wyp     25      13188888888888test    30      13888888888888zs      34      899314121Time taken: 0.096 seconds, Fetched: 7 row(s)

从上面的执行结果我们可以看到,数据的确导入到wyp表中了!请注意load data inpath '/home/wyp/add.txt' into table wyp;里面是没有local这个单词的,这个是和一中的区别。

3、从别的表中查询出相应的数据并导入到Hive表中

基本语法:

insert into table 目标表名称   [partition (分区字段=值)]   select 一组字段   from 源表名称;

假设Hive中有test表,其建表语句如下所示:

hive> create table test(id int, name string,tel string)partitioned by(age int)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'STORED AS TEXTFILE;OKTime taken: 0.261 seconds

大体和wyp表的建表语句类似,只不过test表里面用age作为了分区字段。对于分区,这里在做解释一下:

分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比如wyp表有dt和city两个分区,则对应dt=20131218,city=BJ对应表的目录为/user/hive/warehouse/dt=20131218/city=BJ,所有属于这个分区的数据都存放在这个目录中。

下面语句就是将wyp表中的查询结果并插入到test表中:

hive> insert into table testpartition (age='25')select id, name, telfrom wyp;

#########################################

这里输出了一堆Mapreduce任务信息,这里省略

#########################################

Total MapReduce CPU Time Spent: 1 seconds 310 msec

OK

Time taken: 19.125 seconds

hive> select * from test;OK5       wyp1    131212121212    256       wyp2    134535353535    257       wyp3    132453535353    258       wyp4    154243434355    251       wyp     13188888888888  252       test    13888888888888  253       zs      899314121       25Time taken: 0.126 seconds, Fetched: 7 row(s)

这里做一下说明:我们知道我们传统数据块的形式insert into table values(字段1,字段2),这种形式hive是不支持的。

4、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中

基本语法:

create table 新表名称

  as  select 一组字段,逗号分隔  from 源表名称;

在实际情况中,表的输出结果可能太多,不适于显示在控制台上,这时候,将Hive的查询输出结果直接存在一个新的表中是非常方便的,我们称这种情况为CTAS(create table .. as select)如下:

hive> create table test4

> as> select id, name, tel> from wyp;

hive> select * from test4;

OK

5 wyp1 131212121212

6 wyp2 134535353535

7 wyp3 132453535353

8 wyp4 154243434355

1 wyp 13188888888888

2 test 13888888888888

3 zs 899314121

Time taken: 0.089 seconds, Fetched: 7 row(s)

数据就插入到test4表中去了,CTAS操作是原子的,因此如果select查询由于某种原因而失败,新表是不会创建的!

二、Hive数据导出方式

可以根据导出的地方不一样,将这些方式分为三种:

导出到本地文件系统;

导出到HDFS中;

导出到Hive的另一个表中。

1、导出到本地文件系统

基本语法:

insert overwrite local directory '本地文件路径'

select 字段 from Hive表名称;

将上文表中的数据导出本地文件系统:

hive> insert overwrite local directory '/home/wyp/wyp'

  >select * from wyp;

这条HQL的执行需要启用Mapreduce完成,运行完这条语句之后,将会在本地文件系统的/home/wyp/wyp目录下生成文件,这个文件是Reduce产生的结果。

2、导出到HDFS中

基本语法:

insert overwrite directory 'HDFS文件路径'

select * from Hive表名称;

将上文表数据导出到HDFS:

hive> insert overwrite directory '/home/wyp/hdfs'

select * from wyp;

将会在HDFS的/home/wyp/hdfs目录下保存导出来的数据。注意,和导出文件到本地文件系统的HQL少一个local,数据的存放路径就不一样了。

3、导出到Hive的另一个表中

与上文 从别的表中查询出相应的数据并导入到Hive表中 一致。

数据 文件 目录 系统 名称 字段 查询 语句 语法 结果 路径 方式 内容 形式 支持 情况 面的 移动 输出 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技产业 互联网科技工作委员会主任 科技互联网产品 工业互联网科技新基建 科技互联网技术 互联网科技金融 互联网金融与金融科技 互联网科技媒体 奇士达互联网科技 奔汉互联网科技 海南购全球互联网科技 互联网汽车科技小镇 常德市电业局互联网科技部 互联网科技大奖都有哪些公司 佛山市拉法互联网科技有限公司 山东星卡互联网科技有限公司官网 智帮互联网科技公司最近动向 富国互联网科技002692 2021世界互联网领先科技成果发布 济南小医互联网科技有限公司招聘 天津市摩尔互联网科技 润盈互联网科技 长亮科技互联网金融 哈尔滨新华互联网科技 太原新华互联网科技学校怎么样 银川新华互联网科技职业技术培训学校图片 产业互联网科技服务公司 本届互联网大会上的黑科技 美国五大互联网科技公司市值多少 广州全民伙伴互联网科技有限公司
0