使用 python 从 bigquery 调用外部表
Posted
技术标签:
【中文标题】使用 python 从 bigquery 调用外部表【英文标题】:Calling external table from bigquery with python 【发布时间】:2020-09-10 11:03:30 【问题描述】:当我尝试访问外部表的数据时,出现如下错误。我无法解决这个问题。以下是有关情况的详细信息;
google.api_core.exceptions.NotFound:404 未找到:文件 /gdrive/id/id123456id
PS:id123456id 是一个虚拟 id。
ID 为 id123456 的文件存在于我的 Google 云端硬盘中。查找此 ID 的 Bigquery 表。
bq_test.json -> 服务帐户凭据的 JSON 文件。此服务帐号具有这些角色;
BigQuery 数据编辑器 BigQuery 数据所有者 BigQuery 数据查看器 BigQuery 用户 所有者这是我的代码块:
from google.cloud import bigquery
from google.oauth2.service_account import Credentials
scopes = (
'https://www.googleapis.com/auth/bigquery',
'https://www.googleapis.com/auth/cloud-platform',
'https://www.googleapis.com/auth/drive'
)
credentials = Credentials.from_service_account_file('bq_test.json')
credentials = credentials.with_scopes(scopes)
client = bigquery.Client(credentials=credentials)
QUERY = (
"""SELECT * FROM
`project_name.dataset_name.ext_table`
LIMIT 5"""
)
query_job = client.query(QUERY)
rows = query_job.result()
for row in rows:
print(row.name)
【问题讨论】:
听起来服务帐户没有访问权限。 @DaImTo 如何授予访问权限?我在角色列表中找不到 drive.readonly 或其他内容。 【参考方案1】:我解决了如下问题;
转到https://console.cloud.google.com/iam-admin/iam?project=PROJECT_ID 获取服务帐户邮件值。 (例如 bq_test@PROJECT_ID.iam.gserviceaccount.com) 转到https://drive.google.com并找到相关文件。 (id = id123456) 右键单击并选择共享 粘贴上面的邮件值。 (bq_test@PROJECT_ID.iam.gserviceaccount.com) 选择只读或任何您需要的。这个流程在我的情况下提供了解决方案。
【讨论】:
以上是关于使用 python 从 bigquery 调用外部表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用调用 UDF 的 Python 脚本来使用 BigQuery API
在 Python 中使用 BigQuery + Pandas 时无法调用 RowIterator 对象