保存Hive查询结果的方法

Posted allen-rg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存Hive查询结果的方法相关的知识,希望对你有一定的参考价值。

很多时候,我们需要将Hive的查询(select)结果保存起来,方便进一步处理或查看。
在Hive里面提供了不同的方式来保存查询结果,在这里做下总结:

一、保存结果到本地

方法1:调用hive标准输出,将查询结果写到指定的文件中
这个方法最为常见,笔者也经常使用。sql的查询结果将直接保存到/tmp/out.txt中:
$ hive -e "select user, login_timestamp from user_login" > /tmp/out.txt

 

方法2:使用INSERT OVERWRITE LOCAL DIRECTORY结果到本地

hive> insert overwrite local directory "/tmp/out/"                                        
    > select user, login_time from user_login;

  

上面的命令会将select user, login_time from user_login的查询结果保存到/tmp/out/本地目录下。

 

我们查看一下/tmp/out/目录下的文件,发现命令执行后,多了两个文件:

$ find /tmp/out/ -type f
/tmp/out/.000000_0.crc
/tmp/out/000000_0

  

默认的字段分割符有时候可能不太方便,幸好Hive提供了修改分割符号的方法,我们只要在导出时指定就可以了:

hive> insert overwrite local directory "/tmp/out/"
    > row format delimited fields terminated by "	" 
    > select user, login_time from user_login;

  

二、保存结果到hdfs

保存查询结果到hdfs很简单,使用INSERT OVERWRITE DIRECTORY就可以完成操作:

hive> insert overwrite directory "/tmp/out/"
    > row format delimited fields terminated by "	" 
    > select user, login_time from user_login;

  

三、保存结果到HIVE表

方法1、已经建好结果表,使用INSERT OVERWRITE TABLE以覆盖方式写入结果表

如果结果表已经建好,可以使用INSERT OVERWRITE TABLE将结果写入结果表:

login_time          	bigint
hive> insert overwrite table query_result     
    > select user, login_time from user_login;

  

当然,HIVE也提供了追加方式INSERT TABLE,可以在原有数据后面加上新的查询结果。在上面这个例子基础上,我们再追加一个查询结果:

hive> insert into table query_result
    > select * from query_result;

  

方法2、如果需要新建一个表,用于存放查询结果,可以使用CREATE TABLE AS SELECT语法

hive> create table query_result 
    > as
    > select user, login_time from user_login;

  

 


以上是关于保存Hive查询结果的方法的主要内容,如果未能解决你的问题,请参考以下文章

presto和hive将查询结果保存到本地的方法

presto和hive将查询结果保存到本地的方法

Hive学习笔记——保存select结果,Join,多重插入

Hive 表数据 加载 导出 查询

Hive 表数据 加载 导出 查询

hive 表的常用操作