在本教程中,您将在 BigQuery 中创建一个供数据分析师使用的授权视图。授权视图可让您与特定用户和群组共享查询结果,而无需为其授予底层源数据的访问权限。视图被授予对源数据的访问权限,而不是用户或群组。您还可以使用视图的 SQL 查询从查询结果中排除列和字段。
除了使用已获授权的视图之外,另一种方法是对源数据设置列级访问权限控制,然后向用户授予对查询受访问权限控制的数据的视图的访问权限。如需详细了解列级访问权限控制,请参阅列级访问权限控制简介。
如果您有多个已获授权的视图访问同一源数据集,则可以授权包含这些视图的数据集,而不是授权单个视图。
目标
- 创建一个数据集来包含您的源数据。
- 运行查询,将数据加载到源数据集中的目标表中。
- 创建一个数据集来包含您的授权视图。
- 通过 SQL 查询创建一个已获授权的视图,该视图用于限制数据分析师可在查询结果中看到的列。
- 向数据分析师授予运行查询作业的权限。
- 向数据分析师授予对包含授权视图的数据集的访问权限。
- 向授权视图授予对源数据集的访问权限。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
- 确保您拥有必要的权限,以便执行本文档中的任务。
转到 BigQuery 页面。
在探索器窗格中,点击您要创建数据集的项目旁边的 > 创建数据集。
查看操作在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
github_source_data
。对于位置类型,请确认选择了多区域。
对于多区域,请选择美国或欧盟。您在本教程中创建的所有资源都应位于同一多区域位置。
点击创建数据集。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE SCHEMA github_source_data;
点击
运行。转到 BigQuery 页面。
在查询编辑器中输入以下查询:
SELECT commit, author, committer, repo_name FROM `bigquery-public-data.github_repos.commits` LIMIT 1000;
点击更多,然后选择查询设置。
在目标位置部分,选择为查询结果设置目标表。
在数据集部分,输入
PROJECT_ID.github_source_data
。将
PROJECT_ID
替换为您的项目 ID。对于表 ID,输入
github_contributors
。点击保存。
点击运行。
查询完成后,在探索器窗格中,展开
github_source_data
,然后点击github_contributors
。如需验证数据是否已写入表中,请点击预览标签页。
转到 BigQuery 页面。
在探索器面板中,选择您要在其中创建数据集的项目。
展开
查看操作选项,然后点击创建数据集。在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
shared_views
。对于位置类型,请确认选择了多区域。
对于多区域,请选择美国或欧盟。您在本教程中创建的所有资源都应位于同一多区域位置。
点击创建数据集。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE SCHEMA shared_views;
点击
运行。转到 BigQuery 页面。
在查询编辑器中,输入以下查询。
SELECT commit, author.name AS author, committer.name AS committer, repo_name FROM `PROJECT_ID.github_source_data.github_contributors`;
将
PROJECT_ID
替换为您的项目 ID。依次点击保存 > 保存视图。
在保存视图对话框中,执行以下操作:
在 Project 部分中,验证是否已选定您的项目。
在数据集部分,输入
shared_views
。对于表,输入
github_analyst_view
。点击保存。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE VIEW shared_views.github_analyst_view AS ( SELECT commit, author.name AS author, committer.name AS committer, repo_name FROM `PROJECT_ID.github_source_data.github_contributors` );
将
PROJECT_ID
替换为您的项目 ID。点击
运行。在 Google Cloud 控制台中,前往 IAM 页面。
确保在项目选择器中选中您的项目。
点击
授予访问权限。在授予访问权限对话框中,执行以下操作:
在新的主账号字段中,输入包含数据分析师的群组。例如
data_analysts@example.com
。在选择角色字段中,搜索 BigQuery User 角色并将其选中。
点击保存。
转到 BigQuery 页面。
在探索器窗格中,选择
shared_views
数据集以打开详情标签页。点击 > 权限。
共享在共享权限窗格中,点击添加主账号。
对于新的主账号,输入包含数据分析师的群组,例如
data_analysts@example.com
。点击选择角色,然后选择 BigQuery > BigQuery Data Viewer。
点击保存。
点击关闭。
转到 BigQuery 页面。
在探索器窗格中,选择
github_source_data
数据集以打开详情标签页。依次点击共享 > 授权视图。
在已获授权的视图窗格中,在已获授权的视图字段中输入
PROJECT_ID.shared_views.github_analyst_view
。将 PROJECT_ID 替换为您的项目 ID。
点击添加授权。
转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
SELECT * FROM `
PROJECT_ID
.shared_views.github_analyst_view`;将
PROJECT_ID
替换为您的项目 ID。点击
运行。- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- 如需了解 BigQuery 中的访问权限控制,请参阅 BigQuery IAM 角色和权限。
- 如需了解 BigQuery 视图,请参阅逻辑视图简介。
- 如需详细了解已获授权的视图,请参阅已获授权的视图。
- 如需了解有关访问权限控制的基本概念,请参阅 IAM 概览。
- 如需了解如何管理访问权限控制,请参阅管理政策。
创建用于存储源数据的数据集
首先,创建一个数据集来存储源数据。
如需创建源数据集,请选择以下选项之一:
控制台
SQL
如需详细了解如何运行查询,请参阅运行交互式查询。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
创建表并加载源数据
创建源数据集后,您可以通过将 SQL 查询的结果保存到目标表来填充其中的表。此查询会从 GitHub 公开数据集中检索数据。
控制台
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
创建用于存储授权视图的数据集
创建源数据集后,您需要创建一个新的独立数据集,以存储要与数据分析师共享的授权视图。在稍后的步骤中,您将向授权视图授予对源数据集内数据的访问权限。您的数据分析师将有权访问已获授权的视图,但无权直接访问源数据。
已获授权的视图应在与源数据不同的数据集中创建。这样,数据所有者可以为用户提供对已授权的视图的访问权限,而无需同时授予对底层数据的访问权限。源数据数据集和已获授权的视图数据集必须位于同一地区位置。
如需创建用于存储视图的数据集,请选择以下选项之一:
控制台
SQL
如需详细了解如何运行查询,请参阅运行交互式查询。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在新数据集中创建授权视图
在新数据集中,您可以创建想要授权的视图,即您与数据分析师共享的视图。该视图是使用 SQL 查询创建的,其中未包含您不希望数据分析师看到的列。
github_contributors
源表包含两个 RECORD
类型的字段:author
和 committer
。在本教程中,您的授权视图不包含除作者姓名以外的所有作者数据,且不包含除提交者姓名以外的所有提交者数据。
如需在新数据集中创建视图,请选择以下选项之一:
控制台
SQL
如需详细了解如何运行查询,请参阅运行交互式查询。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
向数据分析师授予运行查询作业的权限
为了查询视图,您的数据分析师需要拥有 bigquery.jobs.create
权限才能运行查询作业,并且需要获得对该视图的访问权限。在此部分中,您需要向数据分析师授予 bigquery.user
角色。bigquery.user
角色包含 bigquery.jobs.create
权限。在稍后的步骤中,您将向数据分析师授予访问该视图的权限。
如需将数据分析师群组分配给项目级 bigquery.user
角色,请执行以下操作:
向数据分析师授予查询授权视图的权限
为了让数据分析师能够查询视图,需要针对包含该视图的数据集或视图向他们授予 bigquery.dataViewer
角色。在数据集级层授予此角色后,分析师便可访问数据集中的所有表和视图。由于本教程中创建的数据集仅包含一个授权视图,因此您将在数据集级层授予访问权限。如果您有一系列需要授予访问权限的授权视图,不妨考虑改用授权数据集。
您之前向数据分析师授予的 bigquery.user
角色可为他们提供创建查询作业所需的权限。但是,他们无法成功查询视图,除非他们还拥有对已获授权的视图或包含该视图的数据集的 bigquery.dataViewer
访问权限。
如需向数据分析师授予对包含授权视图的数据集的 bigquery.dataViewer
访问权限,请执行以下操作:
控制台
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
向视图授予访问源数据集的权限
为包含授权视图的数据集创建访问权限控制后,您需要向授权视图授予对源数据集的访问权限。此授权为视图(而非数据分析师群组)提供源数据的访问权限。
如需向授权视图授予对源数据的访问权限,请选择以下选项之一:
控制台
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
验证配置
配置完成后,数据分析师群组(例如 data_analysts
)的成员可以通过查询视图来验证配置。
为了验证配置,数据分析师应运行以下查询:
查询结果类似于以下内容。结果中仅显示作者姓名和提交者姓名。
如需详细了解如何运行查询,请参阅运行交互式查询。
完整源代码
下面是本教程的完整源代码,供您参考。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
控制台
gcloud
删除各个资源
或者,如需移除本教程中使用的各个资源,请执行以下操作:
由于您创建了本教程中使用的资源,因此无需其他权限即可将其删除。