使用 Python 在存在源数据集的不同云项目中创建 BigQuery 身份验证视图



我们可以在谷歌云项目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 中的代码片段,显示了如何在代码中实现每个步骤。

延伸阅读:

视图简介

创建视图

获取视图信息

创建授权视图

更新视图

管理视图

预定义的角色和权限

最新更新