将 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来获得详细的解释。
我正在尝试将存储在 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来获得详细的解释。