使用hive查询,结果我们通常会保存到hdfs,然后通过sqoop导出工具,将其导出到外部mysql或者其他地方,但是有时候查询结果就是一个数据,比如count(*)的结果,我们希望直接保存到一个中间变量,然后就可以直接将这个结果写入到mysql。
而hive按照条件查询一般会有很多output输出,很难直接捕获到结果。
但是我们可以通过将结果保存到本地文件,然后读取本地文件就可以解决这个问题了。
有两种解决办法:
1、通过输出流重定向的方式将查询结果输入到文件
hive -e "use domestic;select count(*) from uv where thedate=20181021" > /tmp/uv.txt
运行截图:
2、通过hive提供的overwrite语法将结果保存到本地文件夹中:
hive -e "use domestic;insert overwrite local directory '/tmp/uv-local' select count(*) from uv where thedate=20181021"
同样的运行结果会保存在本地的/tmp/uv-local文件夹下:
[lestat@localhost uv]$ cd /tmp/uv-local/
[lestat@localhost uv-local]$ ls
000000_0
[lestat@localhost uv-local]$ cat 000000_0
2666922
[lestat@PUSH-009 uv-local]$
结果直接保存在了文件里面,没有额外的信息,这就很好办了,接下来可以通过cat /tmp/uv-local/000000_0
就可以取得结果。在sh脚本中就可以使用这个值了。