[Hive]格式化输出 Hive 查询结果到 Excel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Hive]格式化输出 Hive 查询结果到 Excel相关的知识,希望对你有一定的参考价值。
参考技术A 首先说明一下, 上面第 1 步导出操作的文件名是系统自己定义的, 而且可能生成多个文件, 部分文件是空的, 这个就不是我们需要的了, 如果你不想这样, 想自己定义输出的文件名, 那么就可以利用Linux 的重定向解决这个问题问题又来了, 如果我使用了重定向的方式自然也就无法使用 HiveSQL 的查询指定分隔符的语法, 分隔符怎么自定义呢?
或者
注意一下, 在第一行的 SQL 中添加了两行:
其目的是在SQL 执行结果的时候生成表头, 那么在导入 Excel 的时候, 就没有必要定制表头了, 数据中天然携带
保存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]格式化输出 Hive 查询结果到 Excel的主要内容,如果未能解决你的问题,请参考以下文章