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 新表名称
asselect 一组字段,逗号分隔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表中 一致。
hive常用功能:Hive数据导入导出方式相关推荐
- DB2数据导入导出的小结
Db2的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机千变万化,这儿就工作中常用到的命令,小结了一下. 一.数据导入导出基础的格式知识 DEL:界定的ASCII文件,行分隔 ...
- MaxCompute数据导入导出
MaxCompute数据导入导出 1.Tunnel命令导入数据 2.MaxCompute Studio导入数据 3.Tunnel SDK 4.其他导入方式 详细介绍请见 MaxCompute提供多种数 ...
- hive数据导入导出
Hive数据导入导出的几种方式 一,Hive数据导入的几种方式 首先列出讲述下面几种导入方式的数据和hive表. 导入: 本地文件导入到Hive表: Hive表导入到Hive表; HDFS文件导入到H ...
- hive:建库建表、表分区、内部表外部表、数据导入导出
hive建库建表与数据导入 建库 hive中有一个默认的库: 库名: default 库目录:hdfs://hdp20-01:9000/user/hive/warehouse 新建库: create ...
- mysql数据首次导入hive_sqoop1.4.7环境搭建及mysql数据导入导出到hive
sqoop文档:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_prerequisites 在hive创建表和导入数据时必须添加分隔符, ...
- HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
1.上传tar包 这里我上传的是apache-hive-1.2.1-bin.tar.gz 2.解压 mkdir -p /home/tuzq/software/hive/ tar -zxvf apach ...
- 利用sqoop将hive数据导入导出数据到mysql
http://niuzhenxin.iteye.com/blog/1726414 运行环境 centos 5.6 hadoop hive sqoop是让hadoop技术支持的clouder公司 ...
- Hive 实战(1)--hive数据导入/导出基础
前沿: Hive也采用类SQL的语法, 但其作为数据仓库, 与面向OLTP的传统关系型数据库(Mysql/Oracle)有着天然的差别. 它用于离线的数据计算分析, 而不追求高并发/低延时的应用场景. ...
- MySQL数据导入导出的两种方式
文章目录 前言 一.使用Navicat Premium数据库可视化工具的企业管理器导入导出数据 1.企业管理器导入步骤: 2.企业管理器导出步骤: 二.cmd方式导入导出数据 1.cmd导入步骤: 2 ...
最新文章
- 世界被一种神秘的数学力量彻底改变了
- 量化指标公式源码_通达信实用指标:《看涨跌》指标公式源码
- WWW2020推荐系统论文合集(已分类整理,并提供下载)
- 广西区计算机一级考试操作题,全国高校计算机等级考试(广西考区)一级笔试试题卷.doc...
- linux 读写时间变长,linux时钟变慢的原因分析【转】
- java与java ee_RxJava + Java8 + Java EE 7 + Arquillian =幸福
- go mod依赖离线安装_Go语言go mod包依赖管理工具使用详解
- MySQL入门之数据完整性约束与表维护
- 多线程处理list_跟大佬聊天,被反问Redis6的多线程真的能提高性能吗?
- 指令重排序导致的可见性问题
- 简单算法系列:快速算法/冒泡算法两则
- 用php表示掷骰子两次比大小,[宜配屋]听图阁
- PyCharm 新建 Python Package
- token与refresh token
- 虚拟机3-11-14:53,工作记录
- 错误:.TemplateProcessingException: Exception evaluating SpringEL expression:
- 2021-08-19
- 2018数学建模国赛回顾(国一)
- OpenCV学习日记(2)
- 微信扫描下载提示以及js判断用户手机系统