# #google-cloud-platform #google-bigquery
Вопрос:
Каковы некоторые из вариантов резервного копирования DDL — файлов BigQuery, в частности представлений, хранимых процедур и кода функций?
У нас есть значительный объем кода в BigQuery, и мы хотим автоматически создать его резервную копию и, желательно, также его версию. Интересно, как это делают другие.
Буду признателен за любую помощь.
Спасибо!
Комментарии:
1. Как вы думаете, возможно ли использовать обычные рабочие процессы git и соответствующие рабочие процессы CICD для поддержания всех таких вещей под контролем версий? Таким образом (по крайней мере) производственная среда получает все это только от git…
Ответ №1:
Чтобы сохранить и отслеживать нашу структуру и код BigQuery, мы используем Terraform для управления всеми ресурсами в большом запросе. Более конкретно, отвечая на ваш вопрос, мы используем ресурс google_bigquery_routine, чтобы убедиться, что изменения будут рассмотрены другими членами команды и всеми другими преимуществами, которые вы получаете от работы с VCS.
Выглядит примерно так:
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.
Пожалуйста, ознакомьтесь с документацией, поскольку эти вещи быстро развиваются.