将BigQuery表从一个项目导出到另一个项目

时间:2016-08-12 16:49:24

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

我正在尝试将存储在Google Cloud Project(Project1)中的BigQuery表(Table1)复制到另一个Google Cloud Project(Project2)。该表是TB的顺序。这样做的最佳方法是什么,以便我不必在本地导出表格?我应该将表格从Project1导出到Google云端存储,然后导出到Project2吗?或者有更好的方法吗?

4 个答案:

答案 0 :(得分:6)

使用bq命令行工具将表从一个项目复制到另一个项目。您可以查看以下示例命令

<强>来源:

  • projectid 123456789123
  • 数据集 dataset1
  • 表格 table1

目标

  • projectid 0987654321098
  • 数据集 dataset2
  • 表格 table2

<强>命令:

bq cp 123456789123:dataset1.table1 0987654321098:dataset2.table2

答案 1 :(得分:1)

如果源和目的地位于同一位置 - 您甚至可以在不同项目之间使用复制表

答案 2 :(得分:1)

使用python的大量复制快速脚本

这使用了上面给出的@ kanishka-mohaia命令,返回格式为json

每个数据集的每个表都将被复制到目标

此脚本不会处理数据集和表的创建

import json
import time
from subprocess import check_output

data_sets = json.loads(check_output("bq ls --format=json", shell=True).decode())

FROM_PROJECT = ''
TO_PROJECT = ''

for ds_item in data_sets:
    dataset = ds_item['datasetReference']['datasetId'].strip()

    tables = json.loads(
        check_output(f"bq ls --format=json {dataset}", shell=True).decode())

    for table_item in tables:
        table = table_item['tableReference']['tableId']
        print(f"Table = {dataset}.{table}")

        command = f'echo y | bq cp {FROM_PROJECT}:{dataset}.{table} ' \
                  f'{TO_PROJECT}:{dataset}.{table}'

        print(command)

        try:
            result = check_output(command, shell=True)

        except Exception as e:
            continue

        print(result)

        time.sleep(5)

答案 3 :(得分: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:cross_region_copy DATASET:目标数据集 NAME:显示工作名称。 PARAMETERS:可以定义源项目ID,源数据集ID和其他参数(覆盖目标表等)

您可以浏览此link以获得详细说明。