Python调用Hive

在没有使用Client库之前,通常我们是用Hive脚本执行,然后用胶水语言来处理结果,很不方便。不过Hive本身提供了多种语言的Client,可以直接操作Hive。但库比较复杂,这里推荐使用pyhs2库,该库对官方提供的接口进行了分装,使用起来更加方便。

使用pip安装pyhs2:

$ sudo pip install pyhs2

注:目前云平台已安装pyhs2

pyhs2流程很简单:连接->执行HiveQL->取出执行结果

实例代码如下:

# coding=utf-8

import pyhs2

sql = "select * from test"

with pyhs2.connect(host='主机地址', authMechanism='PLAIN', user='用户名', database='数据库') as conn:
	with conn.cursor() as cursor:
		try:
			# 2、执行HiveQL
			cursor.execute(sql)
			# 3、获取查询结果
			print cursor.fetchone()
		except pyhs2.error.Pyhs2Exception as err:
			raise SystemExit('execute error: %s' % err)

获取查询结果有几种方法:

  1. fetchone(),返回一条结果,类型为列表(日志已被分割好了)
  2. fetchall(),返回一个列表,列表的每个元素也是列表,即每一行日志
  3. 如果数据量很大,导致内存很吃力,直接用for..in..遍历cursor,结果将迭代产生

更多方法可见pyhs2的源码:https://github.com/BradRuderman/pyhs2/blob/master/pyhs2/cursor.py