在本教程中,您将在 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
- 确保您拥有必要的权限,以便执行本文档中的任务。
所需的角色
如果您创建了一个新项目,那么您就是项目所有者,并且会获得完成本教程所需的所有必要 IAM 权限。
如果您使用的是现有项目,则需要拥有以下角色。
Make sure that you have the following role or roles on the project:
- BigQuery Studio Admin (
roles/bigquery.studioAdmin
)
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
进入 IAM - 选择项目。
- 点击 授予访问权限。
-
在新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。
- 在选择角色列表中,选择一个角色。
- 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
- 点击 Save(保存)。
bigquery.datasets.create
来创建源数据集和包含授权视图的数据集。bigquery.tables.create
来创建用于存储源数据的表,并创建已获授权的视图。bigquery.jobs.create
用于运行将数据加载到源表中的查询作业。bigquery.datasets.getIamPolicy
和bigquery.datasets.get
来获取源数据集和包含已获授权视图的数据集的 IAM 权限。bigquery.datasets.setIamPolicy
和bigquery.datasets.update
用于更新源数据集和包含授权视图的数据集的 IAM 权限。
如需详细了解 BigQuery 中的角色,请参阅预定义的 IAM 角色。
所需权限
如需创建本教程中使用的资源,您需要拥有以下权限。BigQuery Studio Admin 预定义角色会授予所有这些权限。
如需详细了解 BigQuery 中的 IAM 权限,请参阅 BigQuery 权限。
创建用于存储源数据的数据集
首先,创建一个数据集来存储源数据。
如需创建源数据集,请选择以下选项之一:
控制台
转到 BigQuery 页面。
在探索器窗格中,点击您要创建数据集的项目旁边的 > 创建数据集。
查看操作在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
github_source_data
。对于位置类型,请确认已选择多区域。
对于多区域,请选择美国或欧盟。您在本教程中创建的所有资源都应位于同一多区域位置。
点击创建数据集。
SQL
在 Google Cloud 控制台中,转到 BigQuery Studio 页面。
在查询编辑器中,输入以下语句:
CREATE SCHEMA github_source_data;
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
创建表并加载源数据
创建源数据集后,您可以通过将 SQL 查询的结果保存到目标表来填充其中的表。该查询会从 GitHub 公开数据集中检索数据。
控制台
转到 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
。如需验证数据是否已写入表中,请点击预览标签页。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
创建用于存储已获授权的视图的数据集
创建源数据集后,您需要创建一个新的独立数据集,以存储要与数据分析师共享的授权视图。在稍后的步骤中,您将向授权视图授予对源数据集内数据的访问权限。您的数据分析师将有权访问已获授权的视图,但无权直接访问源数据。
已获授权的视图应在与源数据不同的数据集中创建。这样,数据所有者可以为用户提供对已授权的视图的访问权限,而无需同时授予对底层数据的访问权限。源数据数据集和已获授权的视图数据集必须位于同一地区位置。
如需创建用于存储视图的数据集,请选择以下选项之一:
控制台
转到 BigQuery 页面。
在探索器面板中,选择您要在其中创建数据集的项目。
展开
查看操作选项,然后点击创建数据集。在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
shared_views
。对于位置类型,请确认已选择多区域。
对于多区域,请选择美国或欧盟。您在本教程中创建的所有资源都应位于同一多区域位置。
点击创建数据集。
SQL
在 Google Cloud 控制台中,转到 BigQuery Studio 页面。
在查询编辑器中,输入以下语句:
CREATE SCHEMA shared_views;
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
在新数据集中创建已获授权的视图
在新数据集中,您可以创建想要授权的视图,即您与数据分析师共享的视图。该视图是使用 SQL 查询创建的,其中未包含您不希望数据分析师看到的列。
github_contributors
来源表包含两个类型为 RECORD
的字段:author
和 committer
。在本教程中,您的授权视图不包含除作者姓名以外的所有作者数据,且不包含除提交者姓名以外的所有提交者数据。
如需在新数据集中创建视图,请选择以下选项之一:
控制台
转到 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
。点击保存。
SQL
在 Google Cloud 控制台中,转到 BigQuery Studio 页面。
在查询编辑器中,输入以下语句:
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。点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
向数据分析师授予运行查询作业的权限
为了查询视图,您的数据分析师需要具有 bigquery.jobs.create
权限,以便他们可以运行查询作业。bigquery.studioUser
角色包含 bigquery.jobs.create
权限。bigquery.studioUser
角色不会向用户授予查看或查询已获授权的视图的权限。在后续步骤中,您需要向数据分析师授予访问该视图的权限。
如需将数据分析师群组分配给项目级 bigquery.studioUser
角色,请执行以下操作:
在 Google Cloud 控制台中,转到 IAM 页面。
确保在项目选择器中选择您的项目。
点击
授予访问权限。在授予访问权限对话框中,执行以下操作:
在新的主账号字段中,输入包含数据分析师的群组。例如
data_analysts@example.com
。在选择角色字段中,搜索 BigQuery Studio User 角色并将其选中。
点击保存。
向数据分析师授予查询已获授权视图的权限
为了让数据分析师能够查询视图,需要在数据集级别或视图级别向他们授予 bigquery.dataViewer
角色。在数据集级别授予此角色后,分析师便可以访问数据集中的所有表和视图。由于本教程中创建的数据集包含单个已获授权的视图,因此您将在数据集级别授予访问权限。如果您有一系列需要授予访问权限的已获授权的视图,不妨改用已获授权的数据集。
您之前向数据分析师授予的 bigquery.studioUser
角色会为他们提供创建查询作业所需的权限。但是,他们无法成功查询视图,除非他们还拥有对已获授权的视图或包含该视图的数据集的 bigquery.dataViewer
访问权限。
如需向数据分析师提供对包含授权视图的数据集的 bigquery.dataViewer
访问权限,请执行以下操作:
控制台
转到 BigQuery 页面。
在浏览器窗格中,选择
shared_views
数据集。点击 > 权限。
共享在共享权限窗格中,点击添加主账号。
对于新的主账号,输入包含数据分析师的群组,例如
data_analysts@example.com
。点击选择角色,然后依次选择 BigQuery > BigQuery Data Viewer。
点击保存。
点击关闭。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
向视图授予访问源数据集的权限
为包含授权视图的数据集创建访问权限控制后,您需要向授权视图授予对源数据集的访问权限。此授权为视图(而非数据分析师群组)提供源数据的访问权限。
如需向授权视图授予对源数据的访问权限,请选择以下选项之一:
控制台
转到 BigQuery 页面。
在浏览器窗格中,选择
github_source_data
数据集。点击 > 授权视图。
共享在已获授权的视图窗格的已获授权的视图部分,输入
PROJECT_ID.shared_views.github_analyst_view
。将 PROJECT_ID 替换为您的项目 ID。
点击添加授权。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
验证配置
配置完成后,数据分析师群组(例如 data_analysts
)的成员可以通过查询视图来验证配置。
如需验证配置,数据分析师应运行以下查询:
转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
SELECT * FROM `
PROJECT_ID
.shared_views.github_analyst_view`;将
PROJECT_ID
替换为您的项目 ID。点击
运行。
查询结果如下所示。结果中仅显示作者姓名和提交者姓名。
如需详细了解如何运行查询,请参阅运行交互式查询。
完整源代码
下面是本教程的完整源代码,供您参考。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
控制台
- 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.
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
删除各个资源
或者,如需移除本教程中使用的各个资源,请执行以下操作:
在来源数据集中删除表。
由于您创建了本教程中使用的资源,因此无需额外的权限即可将其删除。
后续步骤
- 如需了解 BigQuery 中的访问权限控制,请参阅 BigQuery IAM 角色和权限。
- 如需了解 BigQuery 视图,请参阅逻辑视图简介。
- 如需详细了解已获授权的视图,请参阅已获授权的视图。
- 如需了解访问权限控制的基本概念,请参阅 IAM 概览。
- 如需了解如何管理访问权限控制,请参阅管理政策。