#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
опции, и вы могли бы потенциально проанализировать идентификатор задания из этого.