本文档介绍了如何部署可扩缩的 BigQuery 备份自动化。
本文档面向希望在组织中定义和自动化数据政策的云架构师、工程师和数据治理官。拥有 Terraform 经验会很有帮助。
架构
下图展示了自动备份架构:
Cloud Scheduler 会触发运行。调度程序服务使用 BigQuery API 列出范围内的表。调度器服务通过 Pub/Sub 消息为每个表向配置器服务提交一个请求。配置器服务确定表的备份政策,然后为每个表向相关的 Cloud Run 服务提交一个请求。然后,Cloud Run 服务向 BigQuery API 提交请求并运行备份操作。Pub/Sub 会触发标记器服务,该服务会记录结果并更新 Cloud Storage 元数据层中的备份状态。
如需详细了解此架构,请参阅可扩缩的 BigQuery 备份自动化。
目标
- 构建 Cloud Run 服务。
- 配置 Terraform 变量。
- 运行 Terraform 和手动部署脚本。
- 运行解决方案。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
- BigQuery
- Pub/Sub
- Cloud Logging
- Cloud Run
- Cloud Storage
- Cloud Scheduler
- Firestore in Datastore mode (Datastore)
如需根据您的预计使用量来估算费用,请使用价格计算器。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
如果您要重新部署解决方案,可以跳过此部分(例如,在提交新内容后)。
在本部分中,您将创建一次性资源。
In the Google Cloud console, activate Cloud Shell.
如果您想创建一个新的 Google Cloud 项目用作部署的宿主项目,请使用
gcloud projects create
命令:gcloud projects create PROJECT_ID
将 PROJECT_ID 替换为要创建的项目 ID。
安装 Maven:
- 下载 Maven。
在 Cloud Shell 中,将 Maven 添加到
PATH
:export PATH=/DOWNLOADED_MAVEN_DIR/bin:$PATH
在 Cloud Shell 中,克隆 GitHub 代码库:
git clone https://github.com/GoogleCloudPlatform/bq-backup-manager.git
设置并导出以下环境变量:
export PROJECT_ID=PROJECT_ID export TF_SA=bq-backup-mgr-terraform export COMPUTE_REGION=COMPUTE_REGION export DATA_REGION=DATA_REGION export BUCKET_NAME=${PROJECT_ID}-bq-backup-mgr export BUCKET=gs://${BUCKET_NAME} export DOCKER_REPO_NAME=docker-repo export CONFIG=bq-backup-manager export ACCOUNT=ACCOUNT_EMAIL gcloud config configurations create $CONFIG gcloud config set project $PROJECT_ID gcloud config set account $ACCOUNT gcloud config set compute/region $COMPUTE_REGION gcloud auth login gcloud auth application-default login
替换以下内容:
- PROJECT_ID:您要将解决方案部署到的 Google Cloud 宿主项目的 ID。
- COMPUTE_REGION:您要在其中部署计算资源(例如 Cloud Run 和 Identity and Access Management [IAM])的 Google Cloud 区域。
- DATA_REGION:您要将数据资源(例如存储桶和数据集)部署到的 Google Cloud 区域。
- ACCOUNT_EMAIL:用户账号邮箱。
启用 API:
./scripts/enable_gcp_apis.sh
该脚本会启用以下 API:
- Cloud Resource Manager API
- IAM API
- Data Catalog API
- Artifact Registry API
- BigQuery API
- Pub/Sub API
- Cloud Storage API
- Cloud Run Admin API
- Cloud Build API
- Service Usage API
- App Engine Admin API
- Serverless VPC Access API
- Cloud DNS API
准备 Terraform 状态存储桶:
gcloud storage buckets create $BUCKET --project=$PROJECT_ID --location=$COMPUTE_REGION --uniform-bucket-level-access
准备 Terraform 服务账号:
./scripts/prepare_terraform_service_account.sh
如需发布此解决方案使用的映像,请准备一个 Docker 代码库:
gcloud artifacts repositories create $DOCKER_REPO_NAME --repository-format=docker \ --location=$COMPUTE_REGION \ --description="Docker repository for backups"
在 Cloud Shell 中,激活 gcloud CLI 配置并对其进行身份验证:
gcloud config configurations activate $CONFIG gcloud auth login gcloud auth application-default login
在 Cloud Shell 中,构建并部署将由 Cloud Run 服务使用的 Docker 映像:
export DISPATCHER_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-dispatcher-service:latest export CONFIGURATOR_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-configurator-service:latest export SNAPSHOTER_BQ_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-bq-service:latest export SNAPSHOTER_GCS_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-gcs-service:latest export TAGGER_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-tagger-service:latest ./scripts/deploy_services.sh
在 Cloud Shell 中,创建一个新的 Terraform TFVARS 文件,您可以在其中替换本部分中的变量:
export VARS=FILENAME .tfvars
将 FILENAME 替换为您创建的变量文件的名称(例如
my-variables
)。您可以将example-variables
文件用作参考。在 TFVARS 文件中,配置项目变量:
project = "PROJECT_ID" compute_region = "COMPUTE_REGION" data_region = "DATA_REGION"
您可以使用 variables.tf 文件中定义的默认值,也可以更改这些值。
配置您之前在准备工作中创建并准备好的 Terraform 服务账号:
terraform_service_account = "bq-backup-mgr-terraform@PROJECT_ID.iam.gserviceaccount.com"
请务必使用您创建的账号的完整邮箱。
将 Cloud Run 服务配置为使用您之前构建和部署的容器映像:
dispatcher_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-dispatcher-service:latest" configurator_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-configurator-service:latest" snapshoter_bq_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-bq-service:latest" snapshoter_gcs_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-gcs-service:latest" tagger_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-tagger-service:latest"
此脚本会指示 Terraform 在 Terraform 稍后创建的 Cloud Run 服务中使用这些已发布的映像。
Terraform 仅将 Cloud Run 服务与现有映像相关联。它不会根据代码库构建映像,因为该操作已在上一步中完成。
在
schedulers
变量中,定义至少一个调度程序。调度器会根据表级备份 cron 时间表定期列出和检查表是否需要备份。{ name = "SCHEDULER_NAME" cron = "SCHEDULER_CRON" payload = { is_force_run = FORCE_RUN is_dry_run = DRY_RUN folders_include_list = [FOLDERS_INCLUDED] projects_include_list = [PROJECTS_INCLUDED] projects_exclude_list = [PROJECTS_EXCLUDED] datasets_include_list = [DATASETS_INCLUDED] datasets_exclude_list = [DATASETS_EXCLUDED] tables_include_list = [TABLES_INCLUDED] tables_exclude_list = [TABLES_EXCLUDED] } }
替换以下内容:
- SCHEDULER_NAME:Cloud Scheduler 的显示名称。
- SCHEDULER_CRON:调度器根据范围内的各个表的备份时间表,检查这些表是否需要备份的频率。可以是任何与 unix-cron 兼容的字符串。例如,
0 * * * *
表示每小时频率。 - FORCE_RUN:布尔值。如果您希望调度器使用这些表的 cron 时间表,请将该值设置为
false
。如果设置为true
,则会备份所有范围内的表,无论其 cron 设置如何。 - DRY_RUN:布尔值。如果设置为
true
,则不会执行实际的备份操作。仅生成日志消息。如果您想测试和调试解决方案,而又不想产生备份费用,请使用true
。 - FOLDERS_INCLUDED:包含 BigQuery 数据的文件夹的数字 ID 列表(例如
1234, 456
)。设置后,解决方案会备份指定文件夹中的表,并忽略projects_include_list
、datasets_include_list
和tables_include_list
字段设置。 - PROJECTS_INCLUDED:项目名称的列表(例如
"project1", "project2"
)。设置后,该解决方案会备份指定项目中的表,并忽略datasets_include_list
和tables_include_list
字段设置。如果您设置了folders_include_list
字段,则系统会忽略此设置。 - PROJECTS_EXCLUDED:项目名称或正则表达式的列表(例如
"project1", "regex:^test_"
)。设置后,该解决方案不会备份指定项目中的表。您可以将此设置与folders_include_list
字段结合使用。 - DATASETS_INCLUDED:数据集列表(例如
"project1.dataset1", "project1.dataset2"
)。设置后,该解决方案会备份指定数据集中的表,并忽略tables_include_list
字段设置。如果您设置了folders_include_list
或projects_include_list
字段,则系统会忽略此设置。 - DATASETS_EXCLUDED:数据集或正则表达式列表(例如
"project1.dataset1", "regex:.*\\_landing$"
)。设置后,该解决方案不会备份指定数据集中的表。您可以将此设置与folders_include_list
或projects_include_list
字段结合使用。 - TABLES_INCLUDED:表列表(例如
"project1.dataset1.table 1", "project1.dataset2.table2"
)。设置后,该解决方案会备份指定的表。如果您设置了folders_include_list
、projects_include_list
或datasets_include_list
字段,则系统会忽略此设置。 - TABLES_EXCLUDED:表或正则表达式的列表(例如
"project1.dataset1.table 1", "regex:.*\_test"
)。设置后,该解决方案不会备份指定的表。您可以将此设置与folders_include_list
、projects_include_list
或datasets_include_list
字段结合使用。
所有排除列表都接受
regex:REGULAR_EXPRESSION
形式的正则表达式。如果完全限定的条目名称(例如
"project.dataset.table"
)与提供的任何正则表达式匹配,则该条目将从备份范围中排除。以下是一些常见使用场景:
- 排除所有以
_landing
结尾的数据集名称:datasets_exclude_list = ["regex:.*\\_landing$"]
- 排除所有以
_test
、_tst
、_bkp
或_copy
结尾的表:tables_exclude_list = ["regex:.*\_(test|tst|bkp|copy)"]
在 TFVARS 文件中,为
default_policy
变量设置默认政策的以下常见字段:fallback_policy = { "default_policy" : { "backup_cron" : "BACKUP_CRON" "backup_method" : "BACKUP_METHOD", "backup_time_travel_offset_days" : "OFFSET_DAYS", "backup_storage_project" : "BACKUP_STORAGE_PROJECT", "backup_operation_project" : "BACKUP_OPERATIONS_PROJECT",
替换以下内容:
- BACKUP_CRON:一个 cron 表达式,用于设置表的备份频率(例如,如果每 6 小时备份一次,请指定
0 0 */6 * * *
)。此表达式必须是与 Spring-Framework 兼容的 cron 表达式。 - BACKUP_METHOD:方法,您可以将其指定为
BigQuery Snapshot
、GCS Snapshot
(以使用“导出到 Cloud Storage”方法)或Both
。您需要为所选的每种备份方法提供必填字段,如下所示。 - OFFSET_DAYS:用于确定备份表的时间点的过去天数。值可以是 0 到 7 之间的数字。
- BACKUP_STORAGE_PROJECT:存储所有快照和导出操作的项目的 ID。这是
bq_snapshot_storage_dataset
和gcs_snapshot_storage_location
所在的同一项目。小型部署可以使用宿主项目,但大规模部署应使用单独的项目。 - BACKUP_OPERATIONS_PROJECT:可选设置,您可以在其中指定所有快照和导出操作运行的项目的 ID。此项目适用快照和导出作业配额和限制。这可以是与
backup_storage_project
相同的值。如果未设置,解决方案会使用来源表的项目。
- BACKUP_CRON:一个 cron 表达式,用于设置表的备份频率(例如,如果每 6 小时备份一次,请指定
如果您指定
BigQuery Snapshot
或Both
作为backup_method
,请在default_policy
变量中的通用字段之后添加以下字段:"bq_snapshot_expiration_days" : "SNAPSHOT_EXPIRATION", "bq_snapshot_storage_dataset" : "DATASET_NAME",
替换以下内容:
- SNAPSHOT_EXPIRATION:每个快照的保留天数(例如
15
)。 - DATASET_NAME:用于存储快照的数据集的名称(例如
backups
)。该数据集必须已存在于为backup_storage_project
指定的项目中。
- SNAPSHOT_EXPIRATION:每个快照的保留天数(例如
如果您指定
GCS Snapshot
(以使用“导出到 Cloud Storage”方法)或Both
作为backup_method
,请将以下字段添加到default_policy
变量:"gcs_snapshot_storage_location" : "STORAGE_BUCKET", "gcs_snapshot_format" : "FILE_FORMAT", "gcs_avro_use_logical_types" : AVRO_TYPE, "gcs_csv_delimiter" : "CSV_DELIMITER", "gcs_csv_export_header" : CSV_EXPORT_HEADER
替换以下内容:
- STORAGE_BUCKET:用于存储导出数据的 Cloud Storage 存储桶,格式为
gs://bucket/path/
。例如gs://bucket1/backups/
。 - FILE_FORMAT:用于将 BigQuery 表导出到 Cloud Storage 的文件格式和压缩方式。可用的值包括
CSV
、CSV_GZIP
、JSON
、JSON_GZIP
、AVRO
、AVRO_DEFLATE
、AVRO_SNAPPY
、PARQUET
、PARQUET_SNAPPY
和PARQUET_GZIP
。 - AVRO_TYPE:布尔值。如果设置为
false
,则会将 BigQuery 类型导出为字符串。如果设置为true
,则会将这些类型导出为相应的 Avro 逻辑类型。如果gcs_snapshot_format
是任何 Avro 类型格式,则此字段为必填字段。 - CSV_DELIMITER:导出的 CSV 文件使用的分隔符,值可以是任何 ISO-8859-1 单字节字符。您可以使用
\t
或tab
指定制表符分隔符。当gcs_snapshot_format
为任何 CSV 类型格式时,此字段为必填字段。 - CSV_EXPORT_HEADER:布尔值。如果设置为
true
,则列标题会导出到 CSV 文件。当gcs_snapshot_format
为任何 CSV 类型格式时,此字段为必填字段。
如需了解详情和 Avro 类型映射,请参阅下表:
BigQuery 类型 Avro 逻辑类型 TIMESTAMP
timestamp-micros
(注释 AvroLONG
)DATE
date
(注释 AvroINT
)TIME
timestamp-micro
(注释 AvroLONG
)DATETIME
STRING
(自定义命名的逻辑类型datetime
)- STORAGE_BUCKET:用于存储导出数据的 Cloud Storage 存储桶,格式为
为特定文件夹、项目、数据集和表添加替换变量:
}, "folder_overrides" : { "FOLDER_NUMBER" : { }, }, "project_overrides" : { "PROJECT_NAME" : { } }, "dataset_overrides" : { "PROJECT_NAME.DATASET_NAME" : { } }, "table_overrides" : { "PROJECT_NAME.DATASET_NAME.TABLE_NAME" : { } } }
替换以下内容:
- FOLDER_NUMBER:指定要为其设置替换字段的文件夹。
- PROJECT_NAME:为特定项目、数据集或表设置替换字段时,指定项目。
- DATASET_NAME:为特定数据集或表设置替换字段时,指定数据集。
- TABLE_NAME:指定要为其设置替换字段的表。
对于每个替换条目,例如
project_overrides
变量中的特定项目,请为您之前在default_policy
中指定的备份方法添加常用字段和必填字段。如果您不想为特定级别设置替换项,请将相应变量设置为空映射(例如
project_overrides : {}
)。在以下示例中,为使用 BigQuery 快照方法的特定表设置了替换字段:
}, "project_overrides" : {}, "table_overrides" : { "example_project1.dataset1.table1" : { "backup_cron" : "0 0 */5 * * *", # every 5 hours each day "backup_method" : "BigQuery Snapshot", "backup_time_travel_offset_days" : "7", "backup_storage_project" : "project name", "backup_operation_project" : "project name", # bq settings "bq_snapshot_expiration_days" : "14", "bq_snapshot_storage_dataset" : "backups2" }, } }
如果您想指定其他备份项目,例如在外部配置(表级备份政策)或表来源项目中定义的项目,请配置以下变量:
additional_backup_operation_projects = [ADDITIONAL_BACKUPS]
将 ADDITIONAL_BACKUPS 替换为项目名称的逗号分隔列表(例如
"project1", "project2"
)。如果您仅使用后备备份政策,而没有使用表级外部政策,则可以将该值设置为空列表。如果您未添加此字段,则在可选的
backup_operation_project
字段中指定的任何项目都会自动作为备份项目包含在内。在 Cloud Shell 中,向服务账号授予运行备份操作的所有项目的权限:
./scripts/prepare_backup_operation_projects_for_terraform.sh BACKUP_OPERATIONS_PROJECT DATA_PROJECTS ADDITIONAL_BACKUPS
替换以下内容:
- BACKUP_OPERATIONS_PROJECT:在任何后备政策和表级政策的
backup_operation_project
字段中定义的任何项目。 - DATA_PROJECTS:如果后备或表级政策中未定义
backup_operation_project
字段,请添加这些来源表的项目。 - ADDITIONAL_BACKUPS:在
additional_backup_operation_projects
Terraform 变量中定义的任何项目。
- BACKUP_OPERATIONS_PROJECT:在任何后备政策和表级政策的
在 Cloud Shell 中,运行 Terraform 部署脚本:
cd terraform terraform init \ -backend-config="bucket=${BUCKET_NAME}" \ -backend-config="prefix=terraform-state" \ -backend-config="impersonate_service_account=$TF_SA@$PROJECT_ID.iam.gserviceaccount.com" terraform plan -var-file=$VARS terraform apply -var-file=$VARS
为 Firestore 添加存留时间 (TTL) 政策:
gcloud firestore fields ttls update expires_at \ --collection-group=project_folder_cache \ --enable-ttl \ --async \ --project=$PROJECT_ID
在某些情况下,该解决方案使用 Datastore 作为缓存。为了节省费用并提高查找性能,TTL 政策允许 Firestore 自动删除已过期的条目。
在 Cloud Shell 中,为解决方案使用的服务账号设置以下变量:
export SA_DISPATCHER_EMAIL=dispatcher@${PROJECT_ID}.iam.gserviceaccount.com export SA_CONFIGURATOR_EMAIL=configurator@${PROJECT_ID}.iam.gserviceaccount.com export SA_SNAPSHOTER_BQ_EMAIL=snapshoter-bq@${PROJECT_ID}.iam.gserviceaccount.com export SA_SNAPSHOTER_GCS_EMAIL=snapshoter-gcs@${PROJECT_ID}.iam.gserviceaccount.com export SA_TAGGER_EMAIL=tagger@${PROJECT_ID}.iam.gserviceaccount.com
如果您已在 Terraform 中更改默认名称,请更新服务账号邮箱。
如果您已设置
folders_include_list
字段,并且希望将 BigQuery 扫描的范围设置为包含特定文件夹,请在文件夹级层授予所需权限:./scripts/prepare_data_folders.sh FOLDERS_INCLUDED
如需让应用能够在不同项目中执行必要的任务,请向每个项目授予所需的权限:
./scripts/prepare_data_projects.sh DATA_PROJECTS ./scripts/prepare_backup_storage_projects.sh BACKUP_STORAGE_PROJECT ./scripts/prepare_backup_operation_projects.sh BACKUP_OPERATIONS_PROJECT
替换以下内容:
DATA_PROJECTS:包含要备份的来源表的数据项目(或来源项目),例如
project1 project2
。包括以下项目:- Terraform 变量
schedulers
中的包含列表内指定的项目。 - 如果您想备份宿主项目中的表,请添加宿主项目。
- Terraform 变量
BACKUP_STORAGE_PROJECT:解决方案会在其中存储备份的备份存储项目(或目标项目),例如
project1 project2
。您需要添加以下字段中指定的项目:- 所有后备政策中的
backup_storage_project
字段。 - 所有表级政策中的
backup_storage_project
字段。
包含在多个领域中使用的备份存储项目,或同时用作来源项目和目标项目的项目
- 所有后备政策中的
BACKUP_OPERATIONS_PROJECT:解决方案在其中运行备份操作的数据操作项目,例如
project1 project2
。您需要添加以下字段中指定的项目:- 所有后备政策中的
backup_operation_project
字段。 - BigQuery 扫描范围内的所有纳入名单(如果您未设置
backup_operation_project
字段)。 - 所有表级政策中的
backup_operation_project
字段。
包含在多个领域中使用的备份操作项目,或同时用作来源项目和目标项目的项目
- 所有后备政策中的
对于使用列级访问权限控制的表,请确定您的表使用的所有政策标记分类(如果有),并向解决方案的服务账号授予对表数据的访问权限:
TAXONOMY="projects/TAXONOMY_PROJECT/locations/TAXONOMY_LOCATION/taxonomies/TAXONOMY_ID" gcloud data-catalog taxonomies add-iam-policy-binding \ $TAXONOMY \ --member="serviceAccount:${SA_SNAPSHOTER_BQ_EMAIL}" \ --role='roles/datacatalog.categoryFineGrainedReader' gcloud data-catalog taxonomies add-iam-policy-binding \ $TAXONOMY \ --member="serviceAccount:${SA_SNAPSHOTER_GCS_EMAIL}" \ --role='roles/datacatalog.categoryFineGrainedReader'
替换以下内容:
- TAXONOMY_PROJECT:政策标记分类中的项目 ID
- TAXONOMY_LOCATION:政策标记分类中指定的位置
- TAXONOMY_ID:政策标记分类的分类 ID
针对每个政策标记分类重复执行上一步骤。
在 Cloud Shell 中,使用所需字段创建一个表级政策,然后将该政策存储在政策的 Cloud Storage 存储桶中:
# Use the default backup policies bucket unless overwritten in the .tfvars export POLICIES_BUCKET=${PROJECT_ID}-bq-backup-manager-policies # set target table info export TABLE_PROJECT='TABLE_PROJECT' export TABLE_DATASET='TABLE_DATASET' export TABLE='TABLE_NAME' # Config Source must be 'MANUAL' when assigned this way export BACKUP_POLICY="{ 'config_source' : 'MANUAL', 'backup_cron' : 'BACKUP_CRON', 'backup_method' : 'BACKUP_METHOD', 'backup_time_travel_offset_days' : 'OFFSET_DAYS', 'backup_storage_project' : 'BACKUP_STORAGE_PROJECT', 'backup_operation_project' : 'BACKUP_OPERATION_PROJECT', 'gcs_snapshot_storage_location' : 'STORAGE_BUCKET', 'gcs_snapshot_format' : 'FILE_FORMAT', 'gcs_avro_use_logical_types' : 'AVRO_TYPE', 'bq_snapshot_storage_dataset' : 'DATASET_NAME', 'bq_snapshot_expiration_days' : 'SNAPSHOT_EXPIRATION' }" # File name MUST BE backup_policy.json echo $BACKUP_POLICY >> backup_policy.json gcloud storage cp backup_policy.json gs://${POLICIES_BUCKET}/policy/project=${TABLE_PROJECT}/dataset=${TABLE_DATASET}/table=${TABLE}/backup_policy.json
替换以下内容:
- TABLE_PROJECT:表所在的项目
- TABLE_DATASET:表格的数据集
- TABLE_NAME:表的名称
获取每次运行(包括正在进行的运行)的进度统计信息:
SELECT * FROM `bq_backup_manager.v_run_summary_counts`
获取单次运行的所有严重错误(不可重试的错误):
SELECT * FROM `bq_backup_manager.v_errors_non_retryable` WHERE run_id = 'RUN_ID'
将 RUN_ID 替换为运行的 ID。
获取表的所有运行及其执行信息:
SELECT * FROM `bq_backup_manager.v_errors_non_retryable` WHERE tablespec = 'project.dataset.table'
您还可以指定
grouped
版本:SELECT * FROM `bq_backup_manager.v_audit_log_by_table_grouped`, UNNEST(runs) r WHERE r.run_has_retryable_error = FALSE
如需进行调试,您可以获取每次服务调用的详细请求和响应信息:
SELECT jsonPayload.unified_target_table AS tablespec, jsonPayload.unified_run_id AS run_id, jsonPayload.unified_tracking_id AS tracking_id, CAST(jsonPayload.unified_is_successful AS BOOL) AS configurator_is_successful, jsonPayload.unified_error AS configurator_error, CAST(jsonPayload.unified_is_retryable_error AS BOOL) AS configurator_is_retryable_error, CAST(JSON_VALUE(jsonPayload.unified_input_json, '$.isForceRun') AS BOOL) AS is_force_run, CAST(JSON_VALUE(jsonPayload.unified_output_json, '$.isBackupTime') AS BOOL) AS is_backup_time, JSON_VALUE(jsonPayload.unified_output_json, '$.backupPolicy.method') AS backup_method, CAST(JSON_VALUE(jsonPayload.unified_input_json, '$.isDryRun') AS BOOL) AS is_dry_run, jsonPayload.unified_input_json AS request_json, jsonPayload.unified_output_json AS response_json FROM `bq_backup_manager.run_googleapis_com_stdout` WHERE jsonPayload.global_app_log = 'UNIFIED_LOG' -- 1= dispatcher, 2= configurator, 3=bq snapshoter, -3=gcs snapshoter and 4=tagger AND jsonPayload.unified_component = "2"
获取系统根据后备手动添加或分配的备份政策:
SELECT * FROM `bq_backup_manager.ext_backup_policies`
在 Cloud Shell 中,删除 Terraform 资源:
terraform destroy -var-file="${VARS}"
该命令会删除几乎所有资源。检查以确保您要删除的所有资源都已移除。
- 详细了解 BigQuery:
- 如需查看更多参考架构、图表和最佳做法,请浏览云架构中心。
- Chris DeForeest | 站点可靠性工程师
- Eyal Ben Ivri | 云解决方案架构师
- Jason Davenport | 开发技术推广工程师
- Jaliya Ekanayake | 工程经理
- Muhammad Zain | 云战略工程师
部署基础架构
确保您已至少完成一次准备工作。
在本部分中,请按照相应步骤将最新代码库部署或重新部署到 Google Cloud 环境。
激活 gcloud CLI 配置
构建 Cloud Run 服务映像
配置 Terraform 变量
此部署使用 Terraform 进行配置,并使用部署脚本。
定义后备政策
每次运行时,解决方案都需要确定每个范围内表的备份政策。如需详细了解政策类型,请参阅备份政策。本部分介绍如何定义后备政策。
后备政策是使用一个 default_policy
变量和一组针对不同级别(文件夹、项目、数据集和表)的异常或替换项定义的。这种方法可提供精细的灵活性,而无需为每个表创建条目。
根据您决定使用的备份方法(BigQuery 快照、导出到 Cloud Storage 或两者兼而有之),还有其他组政策字段。
如需查看后备政策的完整示例,请参阅 example-variables
文件。
配置其他备份操作项目
配置 Terraform 服务账号权限
在前面的步骤中,您配置了备份操作在其中运行的备份项目。Terraform 需要将资源部署到这些备份项目。
Terraform 使用的服务账号必须具有这些指定备份项目所需的权限。
运行部署脚本
设置对来源和目标的访问权限
运行解决方案
部署解决方案后,使用以下部分来运行和管理解决方案。
设置表级备份政策
触发备份操作
您之前配置的 Cloud Scheduler 作业会根据其 cron 表达式自动运行。
您也可以在 Google Cloud 控制台中手动运行作业。如需了解详情,请参阅运行作业。
监控和报告
选择宿主项目 (PROJECT_ID) 后,您可以在 BigQuery Studio 中运行以下查询以获取报告和信息。
限制
如需详细了解 backup_operation_project
字段中指定的每个项目的限制和配额,请参阅限制。
清理
为避免因本部署中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留该项目但删除各个资源。
删除项目
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
删除新资源
作为删除项目的替代方法,您还可以删除在此过程中创建的资源。
后续步骤
贡献者
作者:Karim Wadie | 云战略工程师
其他贡献者: