将 BigQuery 项目克隆到另一个帐户

Posted

技术标签:

【中文标题】将 BigQuery 项目克隆到另一个帐户【英文标题】:Clone BigQuery Project to another account 【发布时间】:2020-05-14 15:29:29 【问题描述】:

由于业务发生变化,我需要将整个 BigQuery 项目从一个帐户复制到另一个帐户,而且这些帐户不相关且无法以任何方式链接。

通过 CLI,我能够将表导出到数据集中的 Cloud Storage。此外,数据集中的列表看起来是可能的,因此循环它应该不是问题。

但是我找不到任何合适的方法来管理数据集,既不能导出也不能在新帐户中创建,所以它留下了很多手动任务。

我错过了什么?有一种方法可以导出包含所有数据集的整个项目,或者总是需要手动任务?

数据结构一点也不复杂:

     Project -> dataset -> table
                        -> table
                        -> ...

             -> dataset -> table
                        -> table
                        -> ...
             -> ...

【问题讨论】:

如果答案有用,请考虑接受并点赞。您可以点击 ✓ 接受它并点击 ▲ 【参考方案1】:

您不能一次复制整个项目,但您可以尝试使用Python 中的脚本自动复制,如下所示:

from google.cloud import bigquery
import os

source_project = "<your source project>"
new_project = "<your new project>"

#I suppose that you have access to the source project in your new project
client = bigquery.Client(project=source_project)

datasets = []

#List all the datasets in the source project and save it in a list
for i in client.list_datasets():    
     datasets.append(i.dataset_id)

#For all the datasets, build the commands and then execute them
for i in datasets:
    create_command = "bq mk -d " + i
    copy_command = "bq mk --transfer_config --project_id=" + new_project + " --data_source=cross_region_copy --target_dataset=" +  i + " --display_name='My Dataset Copy' --params='\"source_dataset_id\":\"" + i + "\",\"source_project_id\":\"" + source_project + "\",\"overwrite_destination_table\":\"true\"'"
    os.system(create_command)
    os.system(copy_command)

【讨论】:

我刚刚意识到,bq mk --transferconfig 命令在数据传输中每 24 小时创建一个循环副本。 是的。如果需要,可以使用 --schedule 参数并指定不同的计划 (cloud.google.com/appengine/docs/standard/python/config/…)。【参考方案2】:

您可以为此使用Bigquery Data Transfer service。您不能复制所有项目,而是复制每个数据集的数据集。如果你有很多数据集,你可以编写这个脚本。

注意,你不是从源项目导出到目标项目,而是从源项目导入到目标项目(我的意思是你必须在目标项目中定义转移)

【讨论】:

【参考方案3】:

要将数据集从一个项目复制到另一个项目,则可以使用以下命令进行传输作业:

bq mk --transfer_config --project_id=[PROJECT_ID] --data_source=[DATA_SOURCE] --target_dataset=[DATASET] --display_name=[NAME] --params='[PARAMETERS]'

其中 PROJECT_ID :目标项目 ID 数据源:cross_region_copy 数据集:目标数据集 NAME :您的工作的显示名称。 PARAMETERS : 可以定义源项目 ID、源数据集 ID 和其他参数(覆盖目标表等)

详细解释可以通过这个link。

【讨论】:

以上是关于将 BigQuery 项目克隆到另一个帐户的主要内容,如果未能解决你的问题,请参考以下文章

我们如何将 azure 存储帐户表复制到另一个存储帐户?

将 Google Cloud Platform 项目从一个帐户移动到另一个帐户

将 bigquery 视图复制到另一个区域

BigQuery 表从一个项目复制到另一个项目(这些使用另一个凭据)

如何关联多个 BigQuery 数组字段?

AWS账户之间的克隆/传输EC2实例(AMI)