通过Python客户端进行Hive查询

时间:2013-05-10 22:57:14

标签: python hive thrift

我在AWS EMR中运行的hadoop集群上安装了hive 0.8。

我正在尝试做一些数据QA,它涉及运行一个配置单元查询并将结果提取到python中,其中包含更多逻辑。

目前,这是通过将hive查询作为作业流步骤发送,将这些结果转储到主节点上的本地存储,将这些结果发送到本地计算机,然后使用python加载文件并解析结果来实现的。 。总而言之,这不是一个非常有趣的过程。

理想情况下,我能够以类似于:

的方式做到这一点
conn = hive.connect(ip, port, user, pw)
cursor = conn.cursor()
cursor.execute(query)
rs = cursor.fetchall()

似乎这可能是可能的。 Hive说它支持它here。还有另一个SO question看起来像是在做我想做的事。

但是,我找不到文档。特别是,我无法弄清楚在哪些地方获得这些例子中使用的包。如果有人能够提供有关如何使python客户端正常工作的详细说明,那将会非常有用,但如果失败了,那么知道从哪里获取这些包将会很有帮助。

2 个答案:

答案 0 :(得分:1)

看起来hive_utils包有你想要的东西。查看pypi页面,您可以通过以下方式运行查询:

query = """
    SELECT country, count(1) AS cnt
    FROM User
    GROUP BY country
"""
hive_client = hive_utils.HiveClient(
    server=config['HOST'],
    port=config['PORT'],
    db=config['NAME'],
)
for row in hive_client.execute(query):
    print '%s: %s' % (row['country'], row['cnt'])

安装它还应该安装所需的thrift包。

答案 1 :(得分:0)

如果您从源代码构建配置单元,则模块将位于此处(相对于hive-trunk目录):

./构建/ DIST / LIB /吡啶

如果在PYTHONPATH环境变量中包含该路径,或者使用sys模块在脚本中将该路径添加到python路径,则应该能够访问模块。

另请注意,不再有名为“hive”的模块。在示例代码中,您链接的“hive”应替换为“hive_service”。