我是靠谱客的博主 粗犷草莓,最近开发中收集的这篇文章主要介绍如何将hive的执行结果返回给一个变量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先可以将hive sql写入python脚本


假如有如下hive sql:

hive_cmd = 'hive -e "select count(*) from hbase.routermac_sort_10;"'

一般在python中按照如下方式执行该hive sql:

os.system(hive_cmd)

但是当我需要在程序中拿到count()的执行结果时,使用os.system()则无能为力,应该使用以下方式:

k = os.popen(hive_cmd).read()  

将hive_cmd的执行结果返回给变量k,k的值此时应该是个字符串。但是这里有个坑,此时的k的值可能并非你想要的结果,比如count(*)的结果是4693624,本来的想法是k应该等于4693624,可是事实并非如此;使用print(len(k))得到的结果是居然是12,按理来说字符串‘4693624’的长度应该是7,怎么会是12呢,然后print k会发现输出为:_c0+换行+4693624+换行,原来os.popen(hive_cmd).read()  返回的是文件描述符,在这里k应该等于'_c0n4693624n'


所以想要拿到真正的执行结果则需要对字符串k进行截取:i = k[4:11],此时i = '4693624'


然后可以将i转换为int类型进行进一步的操作。我拿到count()的结果主要是为了对hbase表进行预分区,分区数为40,生成预分区所用split.txt文件过程如下:

i = int(k[4:11])
n = i/40

hive_cmd9 = 'hive -e "select routermac from %s where rank=%s or rank=%s*2 or rank=%s*3 or rank=%s*4 or rank=%s*5 or rank=%s*6 or rank=%s*7 or rank=%s*8 or rank=%s*9 or rank=%s*10 or rank=%s*11 or rank=%s*12 or rank=%s*13 or rank=%s*14 or rank=%s*15 or rank=%s*16 or rank=%s*17 or rank=%s*18 or rank=%s*19 or rank=%s*20 or rank=%s*21 or rank=%s*22 or rank=%s*23 or rank=%s*24 or rank=%s*25 or rank=%s*26 or rank=%s*27 or rank=%s*28 or rank=%s*29 or rank=%s*30 or rank=%s*31 or rank=%s*32 or rank=%s*33 or rank=%s*34 or rank=%s*35 or rank=%s*36 or rank=%s*37 or rank=%s*38 or rank=%s*39;" >> ~/hbase/%s' % (newTableName,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,splitName)

run = os.system(hive_cmd9)


split_10.txt保存的则是预分区所需要要的39个rowkey






最后

以上就是粗犷草莓为你收集整理的如何将hive的执行结果返回给一个变量的全部内容,希望文章能够帮你解决如何将hive的执行结果返回给一个变量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部