Hive三种不同的数据导出的方式

转自:http://blog.chinaunix.net/uid-27177626-id-4653808.html

Hive三种不同的数据导出的方式,根据导出的地方不一样,将这些方法分为三类:
(1)导出到本地文件系统

(2)导出到HDFS

(3)导出到hive的另一个表中

导出到本地文件系统

执行:

hive> insert overwrite local directory ‘/root/student‘

> select * from student;

通过insert overwrite local directory将hive中的表student的内容倒到本地文件系统的/root下的student目录下,这条HQL的执行需要启用Mapreduce完成,运行完这条语句之后,将会在本地文件系统的/root/student目录下生成文件,这个文件是Reduce产生的结果(这里生成的文件名是000000_0),我们可以看看这个文件的内容:

可以看出这就是表student中的数据,数据之间用空格间隔开来。

注:将数据从hive倒到本地文件系统与将数据倒到hive不一样,不能用insert into实现。

导出到HDFS

将hive中的数据导出到HDFS和将数据导出到本地文件系统类似,只是命令的执行中少了一个“local”

可以查看hdfs的对应目录,发现数据确实倒入了指定目录。

将数据导出到hive的另一张表

即:hive> insert into table hive_student_test 
            > select id,name,sex,salary           
            > from student;

前提是在hive中创建好目标表hive_student_test,然后执行上述操作将hive中的student表的数据依据其id,name,sex,salary字段将其导入到目标表中。查询目标表的结果:

在hive0.11.0版本中新引进了一个新的特性,也就是当用户将hive查询结果输出到文件,用户可以只用列的分隔符,而在之前的版本中是不能指定列之间的分隔符的。例如:

hive> insert overwrite local directory ‘/root/student‘

> row format delimited

> fields terminated by ‘\t‘

> select * from student;

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

执行:./hive -e "select * from student" >> /root/student11.txt

这个得到的结果也是用\t分割的。也可以用-f实现。

执行:./hive -f /root/SQL.sql >> /root/student12.txt

时间: 2024-10-20 23:54:35

Hive三种不同的数据导出的方式的相关文章

014-HQL中级4-Hive中的三种不同的数据导出方式介绍

根据导出的地方不一样,将这些方式分为三种:(1).导出到本地文件系统:(2).导出到HDFS中:(3).导出到Hive的另一个表中.为了避免单纯的文字,我将一步一步地用命令进行说明. 一.导出到本地文件系统 hive> insert overwrite local directory '/home/wyp/wyp' > select * from wyp; 复制代码 这条HQL的执行需要启用Mapreduce完成,运行完这条语句之后,将会在本地文件系统的/home/wyp/wyp目录下生成文件

hive三种方式区别和搭建、HiveServer2环境搭建、HWI环境搭建和beeline环境搭建

说在前面的话 以下三种情况,最好是在3台集群里做,比如,master.slave1.slave2的master和slave1都安装了hive,将master作为服务端,将slave1作为服务端. hive三种方式区别和搭建 Hive中metastore(元数据存储)的三种方式: a)内嵌Derby方式 b)Local方式 c)Remote方式 1.本地derby这种方式是最简单的存储方式,只需要在hive-site.xml做如下配置便可<?xml version="1.0"?&g

三种POST和GET的提交方式

向服务器提交数据有两种方式,post和get.两者的区别主要有三点,安全性.长度限制.数据结构.其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体.两种都是较为重要的数据提交方式.现简单介绍一下三种post和get的提交方式.无论是哪种方法实现post和get,get 的访问路径都要携带数据,而post提交是把数据放在方法体中. 普通方法实现get/post提交: 严格遵照Http协议进行数据传输.在安卓开发环境下,由于主线程不能进行网络访问,因此需要在开启一个子线程向服

三种基本网络加载图片方式

代码片段(6) [全屏查看所有代码] 1. [代码]普通加载网络方式     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 public class NormalLoadPictrue {   

Android三种基本的加载网络图片方式(转)

Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Stack的三种含义(数据超过栈的大小,就发生stack overflow)

非常典型的基础知识,转自http://www.ruanyifeng.com/blog/2013/11/stack.html 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分. 含义一:数据结构 stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out). 在这种数据结构中,数据像积木那样一层层堆起来,后面加

十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的

需求是 上传Excel 读取里面的数据.根据Excel中某一个字段,与数据表中的一个字段的唯一性.然后把 Excel表中数据和数据库表中数据一次更改.本次测试一次更新31条数据. 本次测试基于帝国cms 方法1 用一个for徐循环把读取的数据放在一个数组中然后在十几万条的数据表中逐条查询更改,用时35s: $numArr = count($arr);$m = ceil($numArr/10000);for($i=1;$i<=$numArr;$i++){ $n = $i*10000; $j = $

jedis针对三种redis工作模式的连接方式

这里说的三种工作模式是指: 1.单机模式 2.分片模式 3.集群模式(since 3.0) 说明图详见以下: 使用jedis连接模式一: //初始化连接 private Jedis jedis=new Jedis("192.168.0.100", 6379); jedis.set("a","b"); jedis.hmset(key, hash); -- 使用jedis连接模式二:         GenericObjectPoolConfig c

三种POST提交数据方式

0x00 背景 POST是在平日中很常见一种请求方式.相比于GET请求方式来说,POST更加的安全(不会被保存在浏览器历史或WEB服务器日志中)也支持更大的数据传输(GET请求因为是在URL添加参数所以受到URL长度的限制,即只支持2048个字符). 通过POST提交的数据是需要放在请求头的消息体中,支持的格式主要有下面四种,而对于这四种的识别则是服务器端对请求头的content-tyep参数来进行判断的. 0x01 multipart/form-data multipart/form-data