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