【发布时间】:2019-12-06 15:12:10
【问题描述】:
我正在寻找一种通过 Python 查询 Impala 的方法,它使您能够保持连接打开并将查询传递给它。
我可以使用这种代码非常愉快地连接到 Impala:
import subprocess
sql = 'some sort of sql statement;'
cmds = ['impala-shell','-k','-B','-i','impala.company.corp','-q', sql]
out,err = subprocess.Popen(cmds, stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()
print(out.decode())
print(err.decode())
我还可以根据文档here 将-q 和sql 切换为-f 和带有sql 语句的文件。
当我为多个 sql 语句运行它时,它使用的名称节点对于所有查询都是相同的,如果代码中出现故障,它将停止(除非我使用该选项继续),这是一切都在意料之中。
我想要达到的是我可以运行一两个查询,使用一些 python 逻辑检查结果,然后如果它符合我的条件则继续。
我尝试使用 sqlparse 将我的代码拆分为单独的查询并一一运行。这在隔离时效果很好,但是如果一个语句是drop table if exists x;,而下一个语句是create table x (blah string);,那么如果 x 确实存在,那么因为第二个语句将在不同的节点上运行,所以删除的元数据更改还没有到达那个然而,它失败了 table x already exists 或类似的错误。
我认为,除了解决这个元数据问题之外,在我运行所有语句的同时保持与 impala 的连接更有意义,但我正在努力解决这个问题。
有没有人有任何具有此功能的代码?
【问题讨论】:
标签: python python-3.x connection impala