首页 > 解决方案 > 创建 bigquery 身份验证。在使用 python 存在源数据集的不同云项目中的视图

问题描述

我们可以在谷歌云项目 A 中创建一个授权的 bigquery 视图,它的源数据存在于与 python API 不同的云项目 B 中。

我可以从 BQ UI 手动创建上述过程,但我想自动化创建大约 800 个身份验证的过程。来自 python 进程的视图。

我面临的问题是在给定时间,我只能调用一个 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))

标签: google-cloud-platformgoogle-bigquery

解决方案


如果您的用例是与具有不同需求的不同组“共享视图”。我建议您查看这篇文章。在 BigQuery 中共享“视图”的微妙艺术,准确地解释了实现目标所需的条件。尽管本演练专门针对通过控制台 UI 进行设置。我认为这是一篇非常好的文章,可以帮助理解为具有不同需求的用户在不同项目中共享视图所需的权限。

“我们使用项目级 IAM 角色或数据集级访问控制共享对 BigQuery 表和视图的访问权限。目前,访问控制并不直接适用于表或视图。”</p>

为了与最小权限原则保持一致,您应该使用数据集级别的访问控制,而不是项目级别的访问控制。本质上,这是设置适当权限的问题。尤其是对数据集和视图的访问控制

根据官方文档,您不能直接共享对表或视图的访问。特别是您控制对数据集的访问,以及对视图的访问

使用自定义角色可能最好地满足您的特定情况。这些使您能够强制执行最小权限原则,确保用户/服务帐户仅具有执行其任务所需的最低权限。了解 IAM 自定义角色了解 IAM 自定义角色

至于使用 Python Client 库的实现。我建议查看列出的文档,所有这些文档都包含 Python 中的代码片段,展示了每个步骤是如何在代码中实现的。

延伸阅读:

视图介绍

创建视图

获取视图信息

创建授权视图

更新视图

管理视图

预定义的角色和权限


推荐阅读