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

时间:2022-10-17 00:05:28

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

 

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

2)导出到HDFS

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

导出到本地文件系统

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

执行:

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

> select * from student;

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

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

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

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

导出到HDFS

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

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

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

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

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

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字段将其导入到目标表中。查询目标表的结果:

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

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 

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

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

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

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