Impala 在 python 中打开连接

Impala open connection in python

我正在寻找一种通过 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.[=] 为 -f 和带有 sql 语句的文件切换 -q 和 sql。 19=]

当我为多个 sql 语句 运行 宁此时,它使用的名称节点对于所有查询都是相同的,如果代码出现故障它将停止(除非我使用选项继续),这都是预料之中的。

我想要达到的目标是我可以 运行 一两个查询,使用一些 python 逻辑检查结果,如果符合我的条件则继续。
我尝试使用 sqlparse 将我的代码拆分成单独的查询,然后 运行 将它们一一分解。这在孤立的情况下运行良好,但如果一个语句是 drop table if exists x; 而下一个语句是 create table x (blah string); 那么如果 x 确实存在那么因为第二个语句将 运行 在不同的节点上删除元数据更改尚未达到那个,并且失败并显示 table x already exists 或类似错误。

我认为除了解决这个元数据问题外,保持与 impala 的连接更有意义,而我 运行 所有陈述,但我正在努力解决这个问题。
有没有人有任何具有此功能的代码?

您可能想看看 impyla,Impala/Hive python 客户端,如果您还没有这样做的话。

就问题的第二部分而言,使用 Impala 的 SYNC_DDL 选项将保证 DDL 更改在执行下一个 DDL 之前跨 impalad 传播。