将BigQuery项目复制到另一个帐户

时间:2020-05-14 15:29:29

标签: google-cloud-platform google-bigquery google-cloud-storage

由于业务的变化,我需要将整个BigQuery项目从一个帐户复制到另一个帐户,而且这些帐户没有关联并且无法以任何方式链接它。

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

但是我找不到任何合适的方法来管理数据集,无论是导出还是在新帐户中创建,都留下了很多手动任务。

我想念什么吗?有一种方法可以导出包含所有数据集的整个项目,还是总是需要手动执行任务?

数据结构一点也不复杂:

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

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

3 个答案:

答案 0 :(得分:1)

您可以为此使用Bigquery Data Transfer service。您无法复制所有项目,但只能复制每个数据集的数据集。如果您有很多数据集,则可以编写脚本。

请注意,您不会从源项目导出到目标项目,而是从源项目导入目标项目(我是说您必须在目标项目中定义传输)

答案 1 :(得分:1)

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

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

其中PROJECT_ID:目标project_ID DATA_SOURCE:跨区域复制 数据集:目标数据集 名称:显示您的工作名称。 参数:可以定义源项目ID,源数据集ID和其他参数(覆盖目标表等)

您可以通过此link进行详细说明。

答案 2 :(得分: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)