Python 如何在某一特定领域找到工作;“完成”;状态

Python 如何在某一特定领域找到工作;“完成”;状态,python,google-bigquery,Python,Google Bigquery,我试图确定各种工作状态。Bigquery提供了我知道的三种状态:。但是,我试图根据以下内容获取状态: 完成 未决 成功的 错误 取消 运行 我将如何以一种不太“昂贵”的方式做到这一点,因为我正在以一种“长轮询”的方式迭代大约100个结果,大约每10秒一次。目前我正在做一些类似的事情: jobs = [job for job in self.bq_client.list_jobs(project=PROJECT_ID] if state is not None: jobs = [job

我试图确定各种工作状态。Bigquery提供了我知道的三种状态:。但是,我试图根据以下内容获取状态:

  • 完成
  • 未决
  • 成功的
  • 错误
  • 取消
  • 运行
我将如何以一种不太“昂贵”的方式做到这一点,因为我正在以一种“长轮询”的方式迭代大约100个结果,大约每10秒一次。目前我正在做一些类似的事情:

jobs = [job for job in self.bq_client.list_jobs(project=PROJECT_ID]
if state is not None:
    jobs = [job for job in jobs if job.state == state]

如果状态为“完成”、“正在运行”或“挂起”,则上述操作有效。但是我如何涵盖其他州呢?

州会跟踪作业进度,如果您需要成功/失败信息,您可以查看作业的
errorResult
。对于成功的作业,这将是
None
,对于已取消的作业,您将得到
{u'reason':u'stopped',u'message':u'Job execution was cancelled:User requested cancellation'}
。我用来测试这一点的代码:

从google.cloud导入bigquery
client=bigquery.client()
project=“[project-ID]”
状态=[“正在运行”、“挂起”、“成功”、“取消”、“失败”]
def返回状态(作业):
如果job.state==“完成”:
如果job.error\u结果为无:
返回“成功”
elif作业。错误\u结果['reason']==u'stopped':
返回“已取消”
其他:
返回“失败”
其他:
返回job.state
作业=[客户端中作业的作业。列出作业(项目=项目,最大结果=10)]
对于州中的州:
匹配_作业=[如果返回状态(作业)==状态,则作业中的作业对应作业]
对于匹配_作业中的作业:
打印“作业ID:{0},状态:{1},错误结果:{2}”。格式(Job.Job\u ID,State,Job.Error\u Result)
这将打印出如下内容:

jobs = [job for job in self.bq_client.list_jobs(project=PROJECT_ID]
if state is not None:
    jobs = [job for job in jobs if job.state == state]
$python bq-status.py
作业ID:bquijob_……,状态:成功,错误结果:无
作业ID:bquijob_……,状态:成功,错误结果:无
作业ID:作业,状态:成功,错误结果:无
作业ID:作业,状态:成功,错误结果:无
作业ID:作业,状态:成功,错误结果:无
作业ID:作业,状态:成功,错误结果:无
作业ID:计划的查询,状态:成功,错误结果:无
作业ID:bquijob_……,状态:成功,错误结果:无
作业ID:bquijob_……,状态:已取消,错误结果:{u'原因:u'已停止',u'消息:u'作业执行已取消:用户请求取消'}
作业ID:bquijob \…,状态:失败,错误结果:{u'reason':u'invalidQuery',u'message':u'Syntax Error:在[2:18]处非法输入字符“\\\\”,u'location':u'query'}

请记住,加载作业可能会成功,但允许一些
maxBadRecords
,以便
errorResult
不会为空,等等。

太棒了,谢谢。事实上,我正在寻找一个人为大型应用程序的某些领域(BQ、云数据流)提供建议。如果我给你发一封详细的电子邮件可以吗?我的电子邮件是deemarklit@gmail.com如果可以联系的话——谢谢。