Как получить идентификатор задания последнего запуска в инструменте командной строки BigQuery?

#google-bigquery #gcloud #gsutil

#google-bigquery #gcloud #gsutil

Вопрос:

Я запускаю несколько команд в bq для извлечения данных из BigQuery в GCS. Я могу достичь целевого результата.

Я могу запрашивать данные и помещать их в GCS в желаемых форматах. Мне просто интересно, есть ли какой-либо возможный способ получить идентификатор задания последнего задания и его состояние. Я знаю, что мы можем получить сведения обо всех заданиях, используя bq методы списка заданий, но это дает мне полный набор результатов. Я просто хочу получить только состояние этого задания.

bq —location=US extract —destination_format CSV —сжатие GZIP dataset_id.имя_таблицы gs://имя_заголовка/table.csv

bq ls -j -n 1

 jobId          Job Type    State      Start Time      Duration
job_id         extract    FAILURE   30 Mar 13:36:54   0:00:29
  

Мне нужен только идентификатор последнего задания, и это часть состояния.

Ответ №1:

Мне нужен только идентификатор последнего задания, и это часть состояния.

Вы можете передать его в awk :

 bq ls -j -n 1 | awk '{if(NR>2)print}' | awk '{print $1,$3}'

bquxjob_69ed4f1_169ba1f5665 SUCCESS
  

Комментарии:

1. Спасибо @Graham, все работает идеально. Я искал часть таблицы и набора данных, как мы можем проверить, присутствуют ли таблица и набор данных в проекте. предоставляет ли инструмент bq способ проверить их доступность?

2. Обратите внимание, что это работает, если задание, которое вы только что запустили, является самым последним — если есть условие гонки (например, вы запускаете задание, кто-то другой или какой-то другой процесс запускает задание без вашего ведома, а затем вы запускаете эту команду), это может вести себя не так, как ожидалось.

Ответ №2:

Просматривая документы, bq предлагает глобальный флаг --job_id , который позволяет вам установить идентификатор для запускаемого задания (в данном случае с помощью extract команды). У них даже есть раздел о лучших практиках создания идентификатора задания.

После создания задания вы можете получить подробную информацию об этом конкретном задании с помощью bq show --job MY_JOB_ID_HERE .

Если вы не хотите генерировать идентификатор задания самостоятельно, более простым подходом было бы bq распечатать вызовы API с использованием глобальной --apilog stdout опции, и вы могли бы потенциально проанализировать идентификатор задания из этого.