由于业务的变化,我需要将整个BigQuery项目从一个帐户复制到另一个帐户,而且这些帐户没有关联并且无法以任何方式链接它。
通过整个CLI,我能够将表导出到数据集中的Cloud Storage。另外,数据集中的列表表看起来可能,因此遍历它应该不是问题。
但是我找不到任何合适的方法来管理数据集,无论是导出还是在新帐户中创建,都留下了很多手动任务。
我想念什么吗?有一种方法可以导出包含所有数据集的整个项目,还是总是需要手动执行任务?
数据结构一点也不复杂:
Project -> dataset -> table
-> table
-> ...
-> dataset -> table
-> table
-> ...
-> ...
答案 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)