BigQuery 表从一个项目复制到另一个项目(这些使用另一个凭据)

Posted

技术标签:

【中文标题】BigQuery 表从一个项目复制到另一个项目(这些使用另一个凭据)【英文标题】:BigQuery table copy from one project to another (These use another credentials) 【发布时间】:2020-01-30 08:04:03 【问题描述】:

我想将表从 SourceProject 复制到 DestProject。 SourceProject 归服务用户所有,DestProject 归我所有。 我已收到服务用户提供的访问 SourceProject 的凭据。 如何将表从 SourceProject 复制到 DestProject?

我正在检查这个问题。 Exporting BigQuery table from one project to another

我试过这段代码。

source_client = bigquery.Client(
    credentials=user_credentials,
    project=source_project,
)

dest_client = bigquery.Client(
    credentials=my_credentials,
    project=dest_project,
)

source_dataset = source_client.dataset("source_dataset", project="source_project")
source_table_ref = source_dataset.table("source_table")

dest_dataset = dest_client.dataset("dest_dataset", project="dest_project")
dest_table_ref = dest_dataset.table("dest_table")

job = dest_client.copy_table(
    source_table_ref,
    dest_table_ref,
)  # API request

job.result()

但它不起作用。(是的,当然) 返回此消息。

google.api_core.exceptions.Forbidden: 403 POST https://bigquery.googleapis.com/bigquery/v2/projects/dest_project/jobs: Access Denied: Dataset source_project:source_dataset: User does not have bigquery.tables.create permission for dataset source_project:source_dataset.

如果您能告诉我一个好方法或替代方法,那将会很有帮助。 感谢您的阅读。

【问题讨论】:

你检查过你用来写新表的用户是否有这个权限吗? 谢谢。我对权限的了解不够。我试着检查一下。 你检查了吗?请告诉我 很抱歉回复晚了。 权限并没有像你想象的那样设置。如果我设置了查看表的权限似乎可以工作,但是在这种情况下我不能采用那种方法,因为用户担心。所以我改变了方法下载表格的内容并作为数据框上传到我的 bigquery。谢谢。 【参考方案1】:

您的代码是正确的,并且您设置了所有必需的信息,例如项目、数据集和表格。

正如我们在 cmets 中所讨论的,这种方法的问题是您使用了错误的凭据。要在 BigQuery 中创建新表,您需要在给定数据集中拥有 bigquery.tables.create 权限。

如果您需要任何进一步的支持,请告诉我

【讨论】:

非常感谢!当我在测试数据集上设置 bigquery.tables.create 权限并读取凭据时,我继续收到针对此意图的错误,因此我可能会就这个问题提出另一个问题。到时候再次谢谢你。 如果你想继续这个解决方案,你可以更新问题,我会尽力帮助你

以上是关于BigQuery 表从一个项目复制到另一个项目(这些使用另一个凭据)的主要内容,如果未能解决你的问题,请参考以下文章

将 BigQuery 项目克隆到另一个帐户

将多个表从一个数据库复制到另一个

BigQuery“复制表”不适用于小表

text 将表从一个模式复制到另一个模式

使用 Powershell 将 Excel 工作表从一个工作簿复制到另一个工作簿

在 Postgres 中将表从一个数据库复制到另一个数据库