`

Hive几种数据导出方式

    博客分类:
  • hive
 
阅读更多

在本博客的《Hive几种数据导入方式》文章中,谈到了Hive中几种数据的导入方式,不同的数据导入方式用途不一样。今天我们再谈谈Hive中的几种不同的数据导出方式。可以根据导出的地方不一样,将这些方式分为三种:(1)、导出到本地文件系统;(2)、导出到HDFS中;(3)、导出到Hive的另一个表中。为了避免单纯的文字,我将一步一步地用命令进行说明。

  一、导出到本地文件系统

1   
2 hive> insert overwrite local directory '/home/wyp/wyp'
3     > select * from wyp;

  这条HQL的执行需要启用Mapreduce完成,运行完这条语句之后,将会在本地文件系统的/home/wyp/wyp目录下生成文件,这个文件是Reduce产生的结果(这里生成的文件名是000000_0),我们可以看看这个文件的内容:

1 [wyp@master ~/wyp]$ vim 000000_0
2 5^Awyp1^A23^A131212121212
3 6^Awyp2^A24^A134535353535
4 7^Awyp3^A25^A132453535353
5 8^Awyp4^A26^A154243434355
6 1^Awyp^A25^A13188888888888
7 2^Atest^A30^A13888888888888
8 3^Azs^A34^A899314121

可以看出,这就是wyp表中的所有数据。数据中的列与列之间的分隔符是^A(ascii码是\00001)。

  和导入数据到Hive不一样,不能用insert into来将数据导出:

 

01   
02 hive> insert into local directory '/home/wyp/wyp'
03     > select * from wyp;
04 NoViableAltException(79@[])
05         at org.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser.selectClause(HiveParser_SelectClauseParser.java:683)
06         at org.apache.hadoop.hive.ql.parse.HiveParser.selectClause(HiveParser.java:30667)
07         at org.apache.hadoop.hive.ql.parse.HiveParser.regular_body(HiveParser.java:28421)
08         at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatement(HiveParser.java:28306)
09         at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:28100)
10         at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1213)
11         at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:928)
12         at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:190)
13         at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:418)
14         at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:337)
15         at org.apache.hadoop.hive.ql.Driver.run(Driver.java:902)
16         at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259)
17         at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
18         at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413)
19         at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:756)
20         at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614)
21         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
22         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
23         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
24         at java.lang.reflect.Method.invoke(Method.java:597)
25         at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
26 FAILED: ParseException line 1:12 missing TABLE at 'local' near 'local' in select clause
27 line 1:18 cannot recognize input near 'directory' ''/home/wyp/wyp'' 'select' in select clause

  二、导出到HDFS中

  和导入数据到本地文件系统一样的简单,可以用下面的语句实现:

1   
2 hive> insert overwrite directory '/home/wyp/hdfs'
3     > select * from wyp;

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

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

  其实这个在《Hive几种数据导入方式》文中就用到了,这也是Hive的数据导入方式,如下操作:

01  
02 hive> insert into table test
03     > partition (age='25')
04     > select id, name, tel
05     > from wyp;
06 #####################################################################
07            这里输出了一堆Mapreduce任务信息,这里省略
08 #####################################################################
09 Total MapReduce CPU Time Spent: 1 seconds 310 msec
10 OK
11 Time taken: 19.125 seconds
12  
13 hive> select * from test;
14 OK
15 5       wyp1    131212121212    25
16 6       wyp2    134535353535    25
17 7       wyp3    132453535353    25
18 8       wyp4    154243434355    25
19 1       wyp     13188888888888  25
20 2       test    13888888888888  25
21 3       zs      899314121       25
22 Time taken: 0.126 seconds, Fetched: 7 row(s)
  细心的读者可能会问,怎么导入数据到文件中,数据的列之间为什么不是wyp表设定的列分隔符呢?其实在Hive 0.11.0版本之间,数据的导出是不能指定列之间的分隔符的,只能用默认的列分隔符,也就是上面的^A来分割,这样导出来的数据很不直观,看起来很不方便!
  如果你用的Hive版本是0.11.0,那么你可以在导出数据的时候来指定列之间的分隔符(可以参见本博客的《Hive0.11查询结果保存到文件并指定列之间的分隔符》),操作如下:

 

01 hive> insert overwrite local directory '/home/yangping.wu/local'
02     > row format delimited
03     > fields terminated by '\t'
04     > select * from wyp;
05  
06 [wyp@master ~/local]$ vim 000000_0
07 5       wyp1    23      131212121212
08 6       wyp2    24      134535353535
09 7       wyp3    25      132453535353
10 8       wyp4    26      154243434355
11 1       wyp     25      13188888888888
12 2       test    30      13888888888888
13 3       zs      34      899314121

这个很不错吧!
  其实,我们还可以用hive的-e和-f参数来导出数据。其中-e 表示后面直接接带双引号的sql语句;而-f是接一个文件,文件的内容为一个sql语句,如下:

01   
02 [wyp@master ~/local]$  hive -e "select * from wyp" >> local/wyp.txt
03 [wyp@master ~/local]$  cat wyp.txt
04 5       wyp1    23      131212121212
05 6       wyp2    24      134535353535
06 7       wyp3    25      132453535353
07 8       wyp4    26      154243434355
08 1       wyp     25      13188888888888
09 2       test    30      13888888888888
10 3       zs      34      899314121

  得到的结果也是用\t分割的。也可以用-f参数实现:

1   
2 [wyp@master ~/local]$ cat wyp.sql
3 select * from wyp
4 [wyp@master ~/local]$ hive -f wyp.sql >> local/wyp2.txt

  上述语句得到的结果也是\t分割的。

本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接: 【Hive几种数据导出方式】(http://www.iteblog.com/archives/955)

 

分享到:
评论

相关推荐

    Hive几种数据导出方式 – 过往记忆

    Hive几种数据导出方式,总结的几种方式希望能帮到大家

    datax数据从hive导入mysql数据缺失解决

    ### DataX 数据从 Hive 导入 MySQL 数据缺失解决 #### 背景介绍 在大数据处理领域,Hive 和 MySQL 分别作为数据仓库与关系型数据库的重要组成部分,在数据流转过程中承担着关键角色。Hive 通常用于存储海量数据并...

    oracle,teradata,hive,gbase,db2数据库导出csv命令总结

    除了上述方法之外,Oracle 还提供了 `EXP` 命令用于数据备份,它可以通过以下几种方式导出数据: - **完全导出**:`EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y`,需要特殊权限。 - **用户模式导出**...

    HIVE文件读写

    5. 数据导出:当需要将Hive中的结果导出到文件时,可以使用INSERT OVERWRITE命令。例如,将查询结果写入一个新的CSV文件: ```sql INSERT OVERWRITE LOCAL DIRECTORY '/path/to/output' SELECT * FROM my_table ...

    大数据-数据迁移-hive、hbase、kudu迁移

    本文档详细记录了一次从自建Hadoop集群到华为云MRS(Managed Service for Big Data)的大规模数据迁移项目,涉及到了Hive、Kudu和HBase这三种不同类型的数据存储系统。以下是针对这些系统的迁移策略、流程和解决方案...

    Hive用户指南 Hive user guide 中文版

    Hive作为构建在Hadoop之上的数据仓库系统,其主要功能是提供一种简单易用的方式来处理存储在Hadoop HDFS中的大量数据。通过Hive,用户可以使用类似于SQL的查询语言(HiveQL)来查询数据,而不需要深入了解底层的...

    HIVE数据库解析vc编写

    8. **数据导入导出**:VC程序可能需要与Hive之间进行数据交换,理解如何将本地数据加载到Hive,或者从Hive导出数据到本地文件系统,是另一个重要的方面。 通过深入理解以上知识点,VC程序员可以有效地编写代码来...

    Hive on Spark 离线数仓生成的原始数据

    压缩包文件"origin_data"很可能是这些经过处理的原始数据文件的集合,可能包含了多个Hive表的数据导出,或者是ETL过程中的中间结果。每个文件可能按照特定的格式(如CSV、Parquet或ORC)存储,以便于Hive进行读取和...

    hbase与hive数据同步共4页.pdf.zip

    - HBase到Hive:通常在需要进行复杂分析时,将HBase中的实时数据导出到Hive,利用Hive的SQL查询能力进行批量处理。这可以通过MapReduce作业或者Apache Sqoop实现。 Sqoop可以将HBase表导入到Hive,通过定义HBase表...

    源码主要用于学习:1. Spring Boot+Hadoop+Hive+Hbase实现数据基本操作,Hive数据源使.zip

    Hadoop可能用于存储和处理大量原始数据,而Hive作为数据仓库层,提供了一种结构化的方式来管理和分析这些数据。HBase则可能被用于需要快速访问的特定数据子集,例如实时查询或更新。 项目中的具体实现可能包括以下...

    Apache-Hive-Cookbook

    同时,也会涉及如何将Hive数据导出到其他系统。 4. **分区与桶**:讨论如何通过分区和桶优化Hive查询性能,减少数据扫描量,提高查询效率。 5. **Hive UDF(用户自定义函数)**:介绍如何创建和使用自定义函数,...

    配置后的hive-1.1.0-cdh5.7.0.tar.gz

    Hive的主要功能包括数据导入、数据导出、数据转换以及复杂查询,它为大数据分析提供了一个便捷的接口。 Hive的核心组件主要有以下几个: 1. **Hive Metastore**:负责存储Hive表的元数据,如表结构、分区信息、...

    HIVE从入门到精通

    为了解决这一问题,Hive应运而生,它提供了一种更高级别的SQL-like语言(HQL,Hive Query Language),使得非专业MapReduce程序员也能便捷地进行大数据分析。 【Hive的定义】 Hive的核心功能是将结构化的数据文件...

    《企业级Hive实战课程》大纲

    - 几种Join方式(ReduceJoin、MapJoin、SMBJoin)的工作原理与适用场景; - PredicatePushdown(PPD)的作用与实现; - 数据倾斜现象的诊断与解决策略; - 分区使用的优化方法。 2. **实战案例** - 通过具体的...

    Hive用户指南(Hive_user_guide)_中文版

    除了基本的数据存储和查询功能外,Hive还提供了丰富的数据管理功能,包括但不限于表的创建、修改、删除,以及数据的导入导出等操作。 #### 二、Hive基本操作 **2.1 createtable** - **总述**:`CREATE TABLE`命令...

    hive综合应用案例-用户搜索日志分析.docx

    下面列举了几种典型的分析场景及其对应的SQL查询语句。 ##### 4.1 热门搜索词统计 统计每个搜索关键词的出现次数,找出热门搜索词: ```sql SELECT search_keyword, COUNT(*) AS search_count FROM search_logs ...

    Hive的案例详解.pdf

    Hive作为一种基于Hadoop的数据仓库工具,在大数据处理和分析领域展现出广阔的应用前景。借助Hive,企业可以更加高效地进行数据处理和分析,从而提升业务决策的准确性和效率。未来,随着技术的不断进步和完善,Hive的...

    大数据入门HIVE和MySQL安装包

    在大数据领域,Hive和MySQL是两种非常重要的数据存储和管理工具。Hive作为一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供SQL(HQL)查询功能,适合处理大规模的数据集。而MySQL则是一种关系型...

    apache-hive-2.2.0-bin.tar.gz

    Apache是Hive的开源组织,而Spark是另一种快速、通用的大数据处理引擎,可以与Hive结合使用,提供更高效的查询性能。 从"压缩包子文件的文件名称列表"来看,只有一个主要文件 "apache-hive-2.2.0-bin",这意味着...

Global site tag (gtag.js) - Google Analytics