【问题标题】:Data Transfer between two BigQuery Projects using Google Cloud Functions使用 Google Cloud Functions 在两个 BigQuery 项目之间传输数据
【发布时间】:2020-01-31 00:20:32
【问题描述】:

我在 Google Cloud Platform 上创建了两个项目,分别是 project1 和 project2。 Project1 有一个名为 dataset1 的 bigquery 数据集,其中包含一个名为 table1 的表,其中包含一些内容。 Project2 有一个名为 dataset2 的 bigquery 数据集,其中包含一个名为 table2 的表,该表为空。我需要一个 python 代码来复制/导入 table1 并将其导出/复制到 table2,使用 Google Cloud Functions 工具最初为空。

【问题讨论】:

  • 出于好奇,您为什么需要为此使用 Cloud Functions?

标签: python google-cloud-platform google-bigquery google-cloud-functions


【解决方案1】:

在此处查找要复制表的 Python 代码:

代码是:

# from google.cloud import bigquery
# client = bigquery.Client()

source_dataset = client.dataset("samples", project="bigquery-public-data")
source_table_ref = source_dataset.table("shakespeare")

# dataset_id = 'my_dataset'
dest_table_ref = client.dataset(dataset_id).table("destination_table")

job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location="US",
)  # API request

job.result()  # Waits for job to complete.

assert job.state == "DONE"
dest_table = client.get_table(dest_table_ref)  # API request
assert dest_table.num_rows > 0

该问题的另一个答案表明您可以使用INSERT INTO * 进行此操作,但该操作将产生全表扫描的成本 - 而这个操作是免费的。

(我通常使用CREATE TABLEINSERT INTO,因为它们更方便)

【讨论】:

  • 谢谢!但是,如果一个“客户端”可以访问源数据集,而另一个“客户端”可以访问目标,该怎么办。即使用服务帐户对两者进行身份验证。
【解决方案2】:
  1. 了解如何使用 Python 在documentation 之后向 BigQuery 发送查询。

  2. 您需要的“复制/导入 table1 并将其导出/复制到 table2”的查询是(假设 table2 与 table1 具有完全相同的架构):

INSERT INTO project2.dataset2.table2 
SELECT * FROM project1.dataset1.table1;

【讨论】:

猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多