BigQuery 是一个 PB 级的分析数据仓库,可用于对大量数据近乎实时地运行 SQL 查询。
在 BigQuery 中,为视图授予数据集访问权限也称为创建已获授权的视图。已获授权的视图可让您与特定用户和群组共享查询结果,而无需为其授予底层表的访问权限。您还可以使用视图的 SQL 查询来限制用户可查询的列(字段)。在本教程中,您将创建一个已获授权的视图。
目标
在本教程中,您将执行以下操作:
- 创建数据集并对其应用访问权限控制
- 向项目分配访问权限控制
- 创建一个已获授权的视图,它用于限制用户可查询的数据
费用
BigQuery 是一款付费产品,本教程中涉及的操作将产生 BigQuery 使用费。BigQuery 提供一些有特定限额的免费资源。如需了解详情,请参阅始终免费用量限制。
准备工作
开始学习本教程前,请先使用 Google Cloud Console 创建或选择项目。
简介
在本教程中,您将创建两个数据集:一个数据集用于源数据,第二个数据集用于已获授权的视图。使用来自 GitHub 公开数据集的数据填充源数据集。然后创建在源数据集中查询表的视图。
创建数据集和视图后,您可以向项目、包含视图的数据集和包含源数据的数据集分配访问权限控制。
为视图授予源数据集访问权限也称为创建已获授权的视图。在创建已获授权的视图时,请按照以下步骤操作:
- 创建用于存储视图的单独数据集
- 在新数据集中创建视图
- 向项目分配访问权限控制
- 向包含视图的数据集分配访问权限控制
- 向视图授予访问源数据集的权限
创建源数据集
首先,创建一个数据集来存储源数据。在本教程中,您将通过查询 GitHub 公开数据集填充源数据集中的表。源数据集中的数据包含您不希望数据分析师看到的信息。因此,您使用已获授权的视图来限制对数据的访问。
要创建源数据集,请执行以下操作:
控制台
在 Cloud Console 中打开 BigQuery 页面。
在浏览器面板中,选择您要在其中创建数据集的项目。
在详细信息面板中,点击创建数据集。
对于数据集 ID,请键入
github_source_data
。保留其他所有默认设置不变,然后点击创建数据集。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
创建源数据集后,您可以使用 SQL 查询在其中填充表。此查询会从 GitHub 公开数据集中检索数据。
控制台
在 Cloud Console 中打开 BigQuery 页面。
点击编写新查询。
复制以下查询并粘贴到查询编辑器文本区域中。
SELECT commit, author, committer, repo_name FROM `bigquery-public-data.github_repos.commits` LIMIT 1000
点击更多,然后选择查询设置。
在目标位置部分,勾选为查询结果设置目标表对应的复选框。
- 在项目名称部分,确保已选中您的项目。
- 在数据集名称部分,确保已选中
github_source_data
。 - 在表名称部分,输入
github_contributors
。 - 点击保存。
点击运行。
完成查询后,点击 github_contributors,然后点击预览,验证数据是否已写入表中。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
创建单独的数据集以存储视图
创建源数据集后,您需要创建一个新的独立数据集,以存储要与数据分析师共享的授权视图。在稍后的步骤中,您将向授权视图授予对源数据集内数据的访问权限。您的数据分析师将有权访问已获授权的视图,但无权直接访问源数据。
您应在不同于源数据的数据集中创建在数据集级层控制其访问权限的已获授权的视图,以便数据所有者可以为用户提供对已授权的视图的访问权限,而无需同时授予对底层数据的访问权限。源数据数据集和已获授权的视图数据集必须位于同一地区位置。
要创建用于存储视图的数据集,请执行以下操作:
控制台
在 Cloud Console 中打开 BigQuery 页面。
在浏览器面板中,选择您要在其中创建数据集的项目。
在详细信息面板中,点击创建数据集。
对于数据集 ID,请键入
shared_views
。保留其他所有默认设置不变,然后点击创建数据集。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
在新数据集中创建视图
在新数据集中,您可以创建想要授权的视图,即您与数据分析师共享的视图。该视图是使用 SQL 查询创建的,其中未包含您不希望数据分析师看到的列。
在本教程中,您的共享视图不包含除作者姓名以外的所有作者信息,且不包含除提交者姓名以外的所有提交者信息。
要在新数据集中创建视图,请执行以下操作:
控制台
在 Cloud Console 中打开 BigQuery 页面。
点击编写新查询。
复制以下查询并粘贴到查询编辑器文本区域中。请将
project_id
替换为您的项目 ID:SELECT commit, author.name as author, committer.name as committer, repo_name FROM `project_id.github_source_data.github_contributors`
点击更多,然后选择查询设置。
在 SQL 方言下选择标准。点击保存以更新查询设置。
在保存下拉列表中,选择保存视图。
在保存视图对话框中,执行以下操作:
- 在项目名称部分,确保已选中您的项目。
- 在数据集名称部分,确保已选中
shared_views
。 - 在表名称部分,输入
github_analyst_view
。 - 点击保存。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
向数据分析师分配项目级 IAM 角色
为了查询视图,您的数据分析师需要具有运行查询作业的权限。bigquery.user
角色具有在项目中运行作业(包括查询作业)的权限。如果您向用户或群组授予项目级层的 bigquery.user
角色,则用户可创建数据集,并可针对这些数据集中的表运行查询作业。bigquery.user
角色不针对用户尚未创建的数据集授予用户查询数据、查看表数据或查看表架构详细信息的权限。
向数据分析师分配项目级层的 bigquery.user
角色后,他们也无法查看或查询包含视图所查询的表的数据集中的表数据。应向企业中的大多数人(数据科学家、商业智能分析师和数据分析师)分配项目级层的 bigquery.user
角色。
当您将群组添加到 IAM 角色时,电子邮件地址和网域必须与某个有效的 Google 帐号或 Google Apps 帐号相关联。
如需将数据分析师群组分配给项目级层的 bigquery.user
角色,请执行以下操作:
控制台
在 Google Cloud Console 中打开 IAM 网页。
点击选择项目。
选择您的项目,然后点击打开。
在 IAM 页面上,点击添加。
在添加成员对话框中,执行以下操作:
- 在成员框中,输入包含数据分析师的群组(例如
data_analysts@example.com
)。 - 在选择角色框中,搜索 BigQuery User 角色并将其选中。
- 点击保存。
- 在成员框中,输入包含数据分析师的群组(例如
向包含视图的数据集分配访问权限控制
为了让数据分析师能够查询视图,需要针对包含该视图的数据集向他们授予 bigquery.dataViewer
角色。bigquery.user
角色为您的数据分析师提供创建查询作业所需的权限,但他们无法成功查询视图,除非他们还至少拥有对包含该视图的数据集的 bigquery.dataViewer
访问权限。
要向数据分析师提供对数据集的 bigquery.dataViewer
访问权限,请执行以下操作:
控制台
在浏览器面板中,选择
shared_views
数据集。点击分享数据集。
在添加成员文本框中,输入包含数据分析师的群组(例如
data_analysts@example.com
)。点击选择角色,然后选择 BigQuery > BigQuery Data Viewer。
点击添加。
点击完成。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
向视图授予访问源数据集的权限
当您为包含视图的数据集创建访问权限控制后,会将视图添加为源数据集中已获授权的视图。这样,视图就可访问源数据,而数据分析师群组则无法访问。
要向视图授予访问源数据的权限,请执行以下操作:
控制台
在浏览器面板中,选择
github_source_data
数据集。点击分享数据集。
在数据集权限面板中,点击已获授权的视图标签页。
在共享已获授权的视图下:
- 在选择项目部分中,验证是否已选定您的项目。
- 在选择数据集部分,选择
shared_views
。 - 在选择视图部分,输入视图名称:
github_analyst_view
。 - 点击添加。
点击完成。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
验证配置
配置完成后,数据分析师群组(例如 data_analysts
)的成员可以通过查询视图来验证配置。
要验证配置,请执行以下操作:
控制台
让数据分析师群组的成员转到 Cloud Console 中的 BigQuery 页面。
点击编写新查询。
复制以下查询并粘贴到查询编辑器文本区域中。请将
project_id
替换为您的项目 ID。SELECT * FROM `project_id.shared_views.github_analyst_view`
完整源代码
下面是本教程的完整源代码,供您参考。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。