python - 显示 Hive 查询的进度

标签 python hive pyodbc

我正在通过 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/

相关文章:

Python pyodbc 奇怪的 unicode 字节码

Python 无法更新 JSON 字符串的坐标

python - 将数据帧的每三行乘以不同的值

python - 如何使用 Google Drive API 和 Python 覆盖 CSV 文件?

python - argparse:位置参数的个人选择的使用报告?

sql-server-2008 - 从 sql server 导入表时 sqoop 挂起

date - MM 中的月份在 Hive 中使用 Month()

python - 如何使用 python 删除文本文件中的一行

hadoop - 如何访问 WSO2 BAM 的 hadoop 作业跟踪器?

python - 验证 Excel 单元格值并插入 SQL 错误 HY000 Python