Состояние отслеживает ход выполнения задания и, если вам нужна информация об успехе / неудаче, вы хотите просмотреть errorResult
ответа .Для успешных заданий это будет None
, для отмененных - {u'reason': u'stopped', u'message': u'Job execution was cancelled: User requested cancellation'}
.Код, который я использовал для проверки этого:
from google.cloud import bigquery
client = bigquery.Client()
project = "[PROJECT-ID]"
states = ["RUNNING", "PENDING", "SUCCESSFUL", "CANCELLED", "FAILED"]
def returnState(job):
if job.state == "DONE":
if job.error_result is None:
return "SUCCESSFUL"
elif job.error_result['reason'] == u'stopped':
return "CANCELLED"
else:
return "FAILED"
else:
return job.state
jobs = [job for job in client.list_jobs(project=project, max_results=10)]
for state in states:
matching_jobs = [job for job in jobs if returnState(job) == state]
for job in matching_jobs:
print "Job ID: {0}, State: {1}, Error Result: {2}".format(job.job_id, state, job.error_result)
Это распечатает что-то вроде:
$ python bq-status.py
Job ID: bquijob_..., State: SUCCESSFUL, Error Result: None
Job ID: bquijob_..., State: SUCCESSFUL, Error Result: None
Job ID: job_..., State: SUCCESSFUL, Error Result: None
Job ID: job_..., State: SUCCESSFUL, Error Result: None
Job ID: job_..., State: SUCCESSFUL, Error Result: None
Job ID: job_..., State: SUCCESSFUL, Error Result: None
Job ID: scheduled_query_..., State: SUCCESSFUL, Error Result: None
Job ID: bquijob_..., State: SUCCESSFUL, Error Result: None
Job ID: bquijob_..., State: CANCELLED, Error Result: {u'reason': u'stopped', u'message': u'Job execution was cancelled: User requested cancellation'}
Job ID: bquijob_..., State: FAILED, Error Result: {u'reason': u'invalidQuery', u'message': u'Syntax error: Illegal input character "\\\\" at [2:18]', u'location': u'query'}
Имейте в виду, что задания загрузки могут быть успешными, но допускают некоторые maxBadRecords
, поэтомучто errorResult
будет не пустым и т. д.