Как получить работу в определенном состоянии "СДЕЛАНО" - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь определить различные рабочие состояния.Bigquery предоставляет три состояния, о которых мне известно: ВЫПОЛНЕНО, ОЖИДАЕТСЯ и РАБОТАЕТ .Тем не менее я пытаюсь получить состояния на основе следующего:

  • Готово
  • Ожидание
  • Успешно
  • Ошибка
  • Отменено
  • Выполнено

Как бы я это сделал не слишком «дорого», так как я перебираю около 100 результатов в некотором «длинном»-полла "мода, примерно раз в десять секунд.В настоящее время я делаю что-то вроде:

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]

Вышеуказанное работает, если состояние одно из следующих: DONE, RUNNING или PENDING.Но как бы я покрыл другие штаты?

1 Ответ

0 голосов
/ 15 февраля 2019

Состояние отслеживает ход выполнения задания и, если вам нужна информация об успехе / неудаче, вы хотите просмотреть 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 будет не пустым и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...