gpt4 book ai didi

python - Impala 在 python 中打开连接

转载 作者:行者123 更新时间:2023-12-01 06:46:08 25 4
gpt4 key购买 nike

我正在寻找一种通过 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-f 的 sql 以及包含 sql 语句的文件.

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

我想要达到的是我可以运行一个或两个查询,使用一些Python逻辑检查结果,然后如果它符合我的条件则继续。
我尝试使用 sqlparse 将代码拆分为单独的查询并一一运行它们。这在单独情况下效果很好,但如果一个语句是 drop table ifexists x; 并且下一个语句是 create table x (blah string); 那么如果 x 实际上做了然后存在,因为第二条语句将在不同的节点上运行,所以删除元数据更改尚未达到该节点,并且它会失败,并出现表 x 已存在或类似错误。

我认为,除了解决这个元数据问题之外,在我运行所有语句的同时保持与 impala 的连接开放更有意义,但我正在努力解决这个问题。
有人有具有此功能的代码吗?

最佳答案

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

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

关于python - Impala 在 python 中打开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com