如何用python运行一个包含多个项目的SQL?(一个google认证的问题)

问题描述 投票:0回答:1

我有一个简单的SQL文本。SELECT COUNT(*) FROM project1.dataset1.table1 t1 INNER JOIN project2.dataset2.table2 t2 ON t2.id = t1.id只是一个例子。表的布局不是我们关心的。

我也有一个凭证json文件:project1.json包含以下信息:{"type": "service_account", "project_id": "project1", "private_key_id":..., "private_key":...,...}。

所以这是我的代码。

        import os
        from google.cloud import bigquery
        from google.oauth2 import service_account
        credentials_json = 'project1.json'
        os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json
        credentials = service_account.Credentials.from_service_account_file(
            credentials_json,
            scopes=['https://www.googleapis.com/auth/cloud-platform']
        )
        client = bigquery.Client(credentials=credentials)
        sql = 'SELECT COUNT(*) AS cnt FROM project1.dataset1.table1 t1 INNER JOIN project2.dataset2.table2 t2 AS t2 ON t2.id = t1.id'
        rows = client.query(sql).result()

google.api_core.exceptions.Forbidden: 403 Access Denied: 表project2:dataset2.table2:用户没有权限查询表project2:dataset2.table2。

我应该怎么做才能运行该SQL

python google-bigquery credentials
1个回答
0
投票

每个服务账户都有一个电子邮件地址。首先,获取该邮箱地址。

然后到project2的权限中,添加服务账号的邮箱,以获取BigQuery的权限,如BigQuery Viewer,BigQuery Owner等。


0
投票

1.进入BigQuery UI中的 云端控制台.

2.选择 project2 从项目的下拉菜单中选择一个项目。

3.选择一个 dataset2 从资源,然后单击 Share dataset 窗口右侧附近的 "服务账户"。

4.在 "共享数据集 "面板中,在 "数据集权限 "选项卡中,输入你要添加到的服务账户。Add members 文本框。

5.对于 Select a role,选择BigQuery,并为服务账户选择一个合适的预定义IAM角色。例如,选择BigQuery,并为服务账户选择适当的预定义IAM角色。Viewer 为只读访问。

这个过程记录在案的是 此处. 请注意,根据您的权限,您在 project2你可能需要一个项目负责人或BigQuery管理员来为你执行这些步骤。

如果有必要重复这些步骤 project1.dataset1虽然根据你得到的错误信息,你可能已经有了该文件的权限。

© www.soinside.com 2019 - 2024. All rights reserved.