我正在运行配置单元0.12,我想运行几个查询并将结果作为python数组返回。
例如:
result=[]
for col in columns:
sql='select {c} as cat,count(*) as cnt from {t} group by {c} having cnt > 100;'.format(t=table,c=col)
result.append(hive.query(sql))
result=dict(result)
我缺少的是运行SQL查询的hive
类。
如何做到这一点?
答案 0 :(得分:2)
一种快速而又脏的方法是从命令行自动化配置单元
hive -e "sql command"
这样的事情应该有效
def query(self,cmd):
"""Run a hive expression"""
cmd='hive -e "'+cmd+'"';
prc = subprocess.Popen(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True)
ret=stdout.split('\n')
ret=[r for r in ret if len(r)]
if (len(ret)==0):
return []
if (ret[0].find('\t')>0):
return [[t.strip() for t in r.split('\t')] for r in ret]
return ret
答案 1 :(得分:1)
另一种方法是使用pyhs2库在Python进程中本地打开与Hive的连接。以下是我拼凑在一起测试不同用例的一些示例代码,但它应该有希望说明这个库的使用。
# Python 2.7
import pyhs2
from pyhs2.error import Pyhs2Exception
hql = "SELECT * FROM my_table"
with pyhs2.connect(
host='localhost', port=10000, authMechanism="PLAIN", user="root" database="default"
# Use your own credentials and connection info here of course
) as db:
with db.cursor() as cursor:
try:
print "Trying default database"
cursor.execute(hql)
for row in cursor.fetch(): print row
except Pyhs2Exception as error:
print(str(error))
根据您的盒子上已安装或未安装的内容,您可能还需要安装libpython
和libsasl2
的开发标题。
答案 2 :(得分:1)
您还可以使用Thrift访问Hive。 https://cwiki.apache.org/confluence/display/Hive/HiveClient#HiveClient-Python。看起来pyhs2主要是直接使用Thrift的包装器。