gpt4 book ai didi

python - 显示 Hive 查询的进度

转载 作者:行者123 更新时间:2023-12-04 17:34:00 27 4
gpt4 key购买 nike

我正在通过 pyodbc 连接到 Hive。连接成功,我可以执行我的查询。

我构建了一个进度函数来显示我提交的作业的进度,它本质上是一个进度条。但是,我看不到进度条

standalone 函数可以工作,但是当我把它放在另一个函数前面时它就不能工作了。

from time import sleep
import sys
def progress_sec(x):
for i in range(21):
sys.stdout.write('\r')
sys.stdout.write("[%-20s] %d%%" % ('='*i, 5*i))
sys.stdout.flush()
sleep(0.25)
return

上面的函数是我的进度条函数,我想把它放在前面:

df_hotels = progress_sec(pd.read_sql(sql, con))

sqlcon 均已定义并正常工作。

我想要一个进度条来显示 df_hotels 行开始执行的进度,但我无法让它工作。

最佳答案

pandas 的 read_sql 是一个阻塞调用。一旦通过调用启动查询,程序将无法在查询返回之前运行。

您可以尝试通过启动多个线程(一个用于 pandas 调用,另一个用于进度条)来解决此问题,但我无法确认这是否有效。

您可以更进一步,在单独的进程中运行查询,例如 @SyntaxVoid suggested ,但您仍然无法获取执行进度。

如果你真的想跟踪 Hive 查询的进度,你可能想放弃 pandaspyodbc,并使用专用接口(interface),如 PyHive ;以下内容摘自其自述文件:

cursor.execute('SELECT * FROM my_awesome_data LIMIT 10', async=True)
status = cursor.poll().operationState
while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE):
logs = cursor.fetch_logs()
for message in logs:
print message

# If needed, an asynchronous query can be cancelled at any time with:
# cursor.cancel()

status = cursor.poll().operationState

print cursor.fetchall()

关于python - 显示 Hive 查询的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417274/

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