Как автоматически создавать резервные копии и версировать код BigQuery, такой как сохраненные процессы?

# #google-cloud-platform #google-bigquery

Вопрос:

Каковы некоторые из вариантов резервного копирования DDL — файлов BigQuery, в частности представлений, хранимых процедур и кода функций?

У нас есть значительный объем кода в BigQuery, и мы хотим автоматически создать его резервную копию и, желательно, также его версию. Интересно, как это делают другие.

Буду признателен за любую помощь.

Спасибо!

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

1. Как вы думаете, возможно ли использовать обычные рабочие процессы git и соответствующие рабочие процессы CICD для поддержания всех таких вещей под контролем версий? Таким образом (по крайней мере) производственная среда получает все это только от git…

Ответ №1:

Чтобы сохранить и отслеживать нашу структуру и код BigQuery, мы используем Terraform для управления всеми ресурсами в большом запросе. Более конкретно, отвечая на ваш вопрос, мы используем ресурс google_bigquery_routine, чтобы убедиться, что изменения будут рассмотрены другими членами команды и всеми другими преимуществами, которые вы получаете от работы с VCS.

Еще одной важной частью нашего кода TerraForm является тот факт, что мы версируем наш модуль BigQuery (через выпуски/теги github), который включает структуру таблиц и процедуры, версируем его и используем в нескольких средах.

Выглядит примерно так:

main.tf

 module "bigquery" {
  source = "github.com/sample-org/terraform-modules.git?ref=0.0.2/bigquery"

  project_id       = var.project_id


  ...
  ... other vars for the module
  ... 
}
 

терраформ-модули/bigquery/main.tf

 resource "google_bigquery_dataset" "test" {
    dataset_id = "dataset_id"
    project_id = var.project_name
}

resource "google_bigquery_routine" "sproc" {
  dataset_id = google_bigquery_dataset.test.dataset_id
  routine_id     = "routine_id"
  routine_type = "PROCEDURE"
  language = "SQL"
  definition_body = "CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x   y);"
}
 

Это помогает нам модернизировать нашу инфраструктуру во всех средах без дополнительных изменений кода

Ответ №2:

В конце концов мы закончили резервное копирование DDL и подпрограмм с помощью INFORMATION_SCHEMA. Запланированное задание извлекает соответствующие метаданные, а затем загружает содержимое в GCS.

Пример SQLs:

 select * from <schema>.INFORMATION_SCHEMA.ROUTINES;
select * from <schema>.INFORMATION_SCHEMA.VIEWS;
select *, DDL from <schema>.INFORMATION_SCHEMA.TABLES;
 

Вы должны явно указать DDL в списке столбцов, чтобы отображалась таблица DDL.

Пожалуйста, ознакомьтесь с документацией, поскольку эти вещи быстро развиваются.