Python配置单元客户端pyhs2:如何从select语句返回结果?
下面是我的代码:Python配置单元客户端pyhs2:如何从select语句返回结果?,python,hive,Python,Hive,下面是我的代码: import pyhs2 with pyhs2.connect(host='localhost', port=10000, authMechanism="PLAIN", user='biuser', password='biuser', database='default') as conn: with conn.c
import pyhs2
with pyhs2.connect(host='localhost',
port=10000,
authMechanism="PLAIN",
user='biuser',
password='biuser',
database='default') as conn:
with conn.cursor() as cur:
#Execute query
cur.execute("select * from some_table")
print "executed"
#Fetch table results
for i in cur.fetch():
print i
上面的代码在打印“已执行”后继续运行,看不到结束!要花这么多时间吗?其他执行,如获取各种数据库名称和获取所有表名称,不会花费太多时间。如何在此处捕获select语句的结果?如果您只想从配置单元中获取数据,也可以尝试以下方法:
hive -e 'select * from table' | sed 's/yourdelimiter/,/g' > output.csv
分隔符是什么取决于您的设置,例如,您可以尝试使用[\t]
或[\01]
如果要通过python脚本运行它,可以更改重定向以指向它:
hive -e 'select * from table' | sed 's/yourdelimiter/,/g' > myscript.py
这不是最优雅的解决方案,但它可以完成这项工作。这应该适合你;将for循环替换为:
while cur.hasMoreRows:
print cur.fetchone()
视情况而定。这张桌子有多大?尽量限制你的选择。这是一张很大的桌子。我确实需要表中的所有结果,我想将输出写入csv文件,以便对其进行进一步分析。这就是我运行select*from table命令的原因。这是我现在需要连接到蜂巢的唯一原因。我注意到,即使是一个小的表大小,脚本也会继续运行。它会打印结果吗?不会!它不会打印任何内容,运行select命令时也不会打印。什么类型的查询可以工作?结果如何?如果您在上面的列表中添加限制100,请选择是否有效?它应该相当快。您的表的行/列有多大?我需要通过Python脚本来完成。您可以尝试通过Python脚本进行重定向,但根据内存和表大小,重定向可能不起作用。我遇到了与原始问题相同的问题,这解决了问题。