python - 如何在Python中将一个项目的存储桶中的数据加载到另一个项目的表中?

标签 python google-bigquery google-cloud-storage

我有两个项目。我将数据存储在 project_A 中,并在 project_B 中构建表。我已经为它们创建了一个 service_account.json ,但是当我需要从 project_A 加载数据时,我不知道如何同时使用这两个文件并在 project_B 中构建表。

数据存储在URI中:

gs://project_A//*

该表将位于 project_B 表名称 huge_table

from google import storage, bigquery

proj_a_client =  storage.Client.from_service_account_json(service_acct_A.json)
proj_b_client = bigquery.Client.from_service_account_json(service_acct_B.json)

dest_table = proj_b_client.dataset('DS_B').table('huge_table')
uri = 'gs://project_A//*'

job_config = bigquery.LoadJobConfig()
load_job = proj_b_client.load_table_from_uri(uri,
                                         dest_table,
                                         job_config=job_config)

但我收到错误:

google.api_core.exceptions.Forbidden: 403 Access Denied: File gs://project_A/: Access Denied

最佳答案

您必须确保 service_acct_B 具有对 project_A 的存储访问权限:

project_A中,

  • 转至IAM 和管理
  • 添加具有(至少)存储对象查看者角色的成员service_acct_B

事实上,您在这里并不使用/不需要service_acct_A,因此 proj_a_client = storage.Client.from_service_account_json(service_acct_A.json) 是多余的。

关于python - 如何在Python中将一个项目的存储桶中的数据加载到另一个项目的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50751413/

相关文章:

python - Python中多重赋值的方法

python - 如何对字符串列表进行数字排序?

python - 最小化到 gnome 面板

python - 如何让 BigQuery 的 API 使用标准 SQL 进行查询?

java - Blob 已创建,但文件未使用 SignedURL 上传

java - 如何使用 Java 检查 Google Cloud Storage 中是否存在文件夹?

python - 数字分解

google-bigquery - BigQuery 通过查询获取表架构

google-bigquery - BigQuery数据类型

scala - 将 Spark 数据帧保存为 Google Cloud Storage 中的 parquet 文件