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

Exporting BigQuery table from one project to another

我正在尝试将存储在 Google 云项目 (Project1) 中的 BigQuery table (Table1) 复制到另一个 Google 云项目 (Project2)。 table 是 TB 的数量级。执行此操作的最佳方法是什么,这样我就不必在本地导出 table?我应该将 table 从 Project1 导出到 Google Cloud Storage,然后再导出到 Project2 吗?或者有更好的方法吗?

如果 Source 和 Destination 位于同一位置 - 您甚至可以在不同的项目之间使用 Copy Table

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

来源:

  • 项目编号: 123456789123
  • 数据集数据集1
  • table: table1

目的地:

  • 项目编号: 0987654321098
  • 数据集数据集2
  • table: table2

命令:

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

大量复制快速脚本使用python

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

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

此脚本不负责数据集的创建和 tables

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)

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

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 和其他参数(覆盖目标 table 等)

你可以通过这个link来获得详细的解释。