我们可以在谷歌云项目A中创建一个授权的bigquery视图,该视图的源数据存在于与python API不同的云项目B中。
我可以从 BQ UI 手动创建上述过程,但我想自动执行从 Python 进程创建大约 800 个身份验证视图的过程。
我面临的问题是在给定时间,我只能调用单个 BigQuery 服务凭据,因此每当我触发进程/代码时,我都会丢失源数据集或查看数据集凭据
from google.cloud import bigquery
import os
from config_files import config
from config_files import db2_table_config
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = config.bq_service_account #service credentials of project B
client = bigquery.Client()
project = 'project_A'
source_dataset_id = 'dataset_b' # which is in different project
source_table_id = 'table' # which is in different project
shared_dataset_ref = client.dataset('dataset_a') #target dataset for project B
view_ref = shared_dataset_ref.table("my_shared_view") #need to be created in project B
view = bigquery.Table(view_ref)
view.view_query = "select query"
view = client.create_table(view) # API request
print("Successfully created view at {}".format(view.full_table_id))
如果您的用例是与具有不同需求的不同组"共享视图"。我建议您查看本文。在 BigQuery 中共享"视图"的微妙艺术,这准确地解释了实现目标所需的内容。尽管本演练专门涉及通过控制台 UI 进行设置。我认为这是一篇非常好的帖子,可以了解具有不同需求的用户在不同项目之间共享视图所需的权限。
"我们使用项目级 IAM 共享对 BigQuery 表和视图的访问权限。 角色或数据集级访问控制。目前,访问控制是 不直接适用于表或视图。
为了与最小特权原则保持一致,应使用数据集级访问控制,而不是项目级访问控制。从本质上讲,这是一个设置适当权限的问题。特别是对数据集和视图的访问的控制
根据官方文档,您不能共享对表或视图的访问权限,directly.in 特别是您可以控制对数据集的访问,以及对视图的访问
使用自定义角色可能最适合您的特定情况。这些使您能够强制实施最小权限原则,确保用户/服务帐户仅具有执行其任务所需的最低权限。了解 IAM 自定义角色,了解 IAM 自定义角色
至于使用Python客户端库的实现。我建议查看列出的文档,所有这些文档都包含 Python 中的代码片段,显示了如何在代码中实现每个步骤。
延伸阅读:
视图简介
创建视图
获取视图信息
创建授权视图
更新视图
管理视图
预定义的角色和权限