Не существует управляемой службы для планирования экспорта таблиц BigQuery, но одним из жизнеспособных подходов является использование Облачных функций в сочетании с Cloud Scheduler .
Облачная функция будет содержать необходимый код для экспорта в облачное хранилище из таблицы BigQuery. Для этого есть несколько языков программирования, таких как Python, Node.JS и Go.
Cloud Scheduler периодически отправляет вызов HTTP в формате cron в облачную функцию, которая, в свою очередь, запускается и запускает экспорт программно.
В качестве примера и, более конкретно, вы можете выполнить следующие шаги:
Создать облачную функцию используя Python с HTTP триггером . Для взаимодействия с BigQuery из кода необходимо использовать клиентскую библиотеку BigQuery . Импортируйте его с помощью from google.cloud import bigquery
. Затем вы можете использовать следующий код в main.py для создания задания экспорта из BigQuery в облачное хранилище:
# Imports the BigQuery client library
from google.cloud import bigquery
def hello_world(request):
# Replace these values according to your project
project_name = "YOUR_PROJECT_ID"
bucket_name = "YOUR_BUCKET"
dataset_name = "YOUR_DATASET"
table_name = "YOUR_TABLE"
destination_uri = "gs://{}/{}".format(bucket_name, "bq_export.csv.gz")
bq_client = bigquery.Client(project=project_name)
dataset = bq_client.dataset(dataset_name, project=project_name)
table_to_export = dataset.table(table_name)
job_config = bigquery.job.ExtractJobConfig()
job_config.compression = bigquery.Compression.GZIP
extract_job = bq_client.extract_table(
table_to_export,
destination_uri,
# Location must match that of the source table.
location="US",
job_config=job_config,
)
return "Job with ID {} started exporting data from {}.{} to {}".format(extract_job.job_id, dataset_name, table_name, destination_uri)
Укажите зависимость клиентской библиотеки в требованиях . TXT файл, добавив эту строку:
google-cloud-bigquery
Создать задание Cloud Scheduler . Установите Frequency you wi sh для задания, которое должно быть выполнено. Например, установка 0 1 * * 0
будет запускать задание раз в неделю в 1:00 каждое воскресное утро. Инструмент crontab *1061* очень полезен, когда дело доходит до экспериментов с планированием cron.
Выберите HTTP в качестве Target , установите URL в качестве URL-адреса облачной функции (ее можно найти, выбрав облачную функцию и перейдя на вкладку Триггер), и в качестве метода HTTP выберите GET
.
После создания и, нажав кнопку RUN NOW , вы можете проверить поведение экспорта. Однако перед этим убедитесь, что учетная запись службы App Engine по умолчанию имеет как минимум роль Cloud IAM roles/storage.objectCreator
, в противном случае операция может завершиться с ошибкой разрешения. Учетная запись службы App Engine по умолчанию имеет вид YOUR_PROJECT_ID@appspot.gserviceaccount.com
.
Если вы хотите sh выполнять экспорт в разные таблицы, наборы данных и сегменты для каждого выполнения, но, по сути, используя одну и ту же облачную функцию, вы можете вместо этого используйте метод HTTP POST
и настройте Body , содержащий указанные параметры в качестве данных, которые будут переданы в облачную функцию - хотя это подразумевает небольшие изменения в коде.
Наконец, когда создается задание, вы можете использовать возвращенные облачной функции job ID
и CLI bq
для просмотра состояния задания экспорта с помощью bq show -j <job_id>
.