如何将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应该等于'_c0\n4693624\n'


所以想要拿到真正的执行结果则需要对字符串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






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值