为表、视图和数据集添加标记
本文档介绍如何使用标记来有条件地将 Identity and Access Management (IAM) 政策应用于 BigQuery 表、视图和数据集。
您还可以使用标记来有条件地通过 IAM 政策拒绝访问 BigQuery 表、视图和数据集(预览版)。如需了解详情,请参阅拒绝政策。
标记是一种键值对,您可以将标记直接附加到表、视图或数据集,也可以让表、视图或数据集从其他Google Cloud 资源继承标记。您可以根据资源是否具有特定标记来有条件地应用政策。例如,您可以有条件地向主账号授予带有 environment:dev
标记的任何数据集的 BigQuery Data Viewer 角色。
如需详细了解如何在 Google Cloud资源层次结构中使用标记,请参阅标记概览。
如需同时授予多个相关 BigQuery 资源(包括尚不存在的资源)的访问权限,请考虑使用 IAM Conditions 条件。
限制
BigQuery Omni 表、隐藏数据集中的表或临时表不支持表标记。BigQuery Omni 数据集不支持数据集标签。此外,BigQuery Omni 中的跨区域查询在对其他区域的表进行访问权限检查时不会使用标记。
您最多可以为一个表或数据集附加 50 个标记。
通配符查询中引用的所有表都必须具有完全相同的标记键和标记值集。
对数据集或表拥有条件式访问权限的用户无法通过 Google Cloud 控制台修改对该资源的权限。仅支持通过 bq 工具和 BigQuery API 修改权限。
BigQuery 之外的某些服务无法正确验证 IAM 标记条件。如果标记条件为正(表示仅当资源具有特定标记时,用户才会在该资源上获得角色),则无论附加哪些标记,系统都会拒绝对该资源的访问。如果标记条件为负条件(表示仅当资源没有特定标记时,用户才会获得该资源的角色),则系统不会检查标记条件。
例如,Data Catalog 无法验证 BigQuery 数据集和表的 IAM 标记条件。假设有一项条件 IAM 政策,为实习生提供具有
employee_type=intern
标记的数据集的 BigQuery Data Viewer 角色。由于这是正标记条件,因此实习生无法在 Data Catalog 中通过搜索来查看数据集,即使这些数据集确实具有employee_type=intern
标记也是如此。如果标记条件更改为负条件,以便实习生只能查看没有employee_type=intern
标记的数据集,则系统会完全跳过检查,并且实习生可以查看其在 BigQuery 中通常无法访问的数据集。
所需的角色
您需要授予 IAM 角色,以便为用户提供执行本文档中的每个任务所需的权限。
以下两个预定义的 IAM 角色均具有所有必要的 BigQuery 权限:
- BigQuery Data Owner (
roles/bigquery.dataOwner
) - BigQuery Admin (
roles/bigquery.admin
)
用于添加和移除标记的 Resource Manager 权限包含在 Tag User 角色 (roles/resourcemanager.tagUser
) 中。
所需权限
如需在 BigQuery 中使用标记,您需要具有以下权限:
操作 | BigQuery 接口(API、CLI、控制台)和 Terraform | Cloud Resource Manager API 或 gcloud |
---|---|---|
将标记附加到表或视图 |
|
|
从表或视图中移除标记 |
|
|
将标记附加到数据集 |
|
|
从数据集中移除标记 |
|
|
如需在 Google Cloud 控制台中列出标记键和键值,您需要拥有以下权限:
如需列出与父级组织或项目关联的标记键,您需要拥有标记键父级的
resourcemanager.tagKeys.list
权限以及每个标记键的resourcemanager.tagKeys.get
权限。如需在 BigQuery 控制台中查看标记键列表,请点击数据集名称,然后点击修改详情;或者点击表或视图名称,然后点击详情 > 修改详情。如需列出与父级组织或项目关联的键的标记值,您需要拥有标记值父级的
resourcemanager.tagValues.list
权限以及每个标记值的resourcemanager.tagValues.get
权限。如需在 BigQuery 控制台中查看标记键值列表,请点击数据集名称,然后点击修改详情;或者点击表或视图名称,然后点击详情 > 修改详情。
如需在 Cloud Resource Manager API 或 gcloud 中使用标记,您需要拥有以下权限:
- 如需使用 Cloud Resource Manager API 或 gcloud CLI 列出附加到表或视图的标记,您需要拥有
bigquery.tables.listTagBindings
IAM 权限。 - 如需列出表或视图的有效标记,您需要拥有
bigquery.tables.listEffectiveTags
IAM 权限。 - 如需使用 Cloud Resource Manager API 或 gcloud CLI 列出附加到数据集的标记,您需要拥有
bigquery.datasets.listTagBindings
IAM 权限。 - 如需列出数据集的有效标记,您需要拥有
bigquery.datasets.listEffectiveTags
IAM 权限。
创建标记键和标记值
您可以在将标记附加到 BigQuery 资源之前创建标记,也可以在使用Google Cloud 控制台创建资源时手动创建标记。
如需了解如何创建标记键和标记值,请参阅 Resource Manager 文档中的创建标记和添加标记值部分。
标记数据集
以下部分介绍了如何将标记附加到新数据集和现有数据集、列出附加到数据集的标记,以及从数据集中分离标记。
在创建新数据集时附加标记
创建标记后,您可以将其附加到新 BigQuery 数据集。对于任何给定的标记键,您只能将一个标记值附加到数据集。您最多可以为一个数据集附加 50 个标记。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,选择您要在其中创建数据集的项目。
点击 > 创建数据集。
查看操作输入新数据集的信息。如需了解详情,请参阅创建数据集。
展开标记部分。
如需应用现有标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择当前范围 - 选择当前组织或选择当前项目。
或者,点击选择范围以搜索资源或查看当前资源列表。
对于键 1 和值 1,请从列表中选择适当的值。
如需手动输入新标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择手动输入 ID > 组织、项目或标记。
如果您要为项目或组织创建标记,请在对话框中输入
PROJECT_ID
或ORGANIZATION_ID
,然后点击保存。对于键 1 和值 1,请从列表中选择适当的值。
可选:如需向表中添加其他标记,请点击添加标记,然后按照上面的步骤操作。
点击创建数据集。
SQL
使用 CREATE SCHEMA
语句。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE SCHEMA PROJECT_ID.DATASET_ID OPTIONS ( tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用带有 --add_tags
标志的 bq mk --dataset
命令:
bq mk --dataset \ --add_tags=TAG \ PROJECT_ID:DATASET_ID
替换以下内容:
TAG
:您要附加到新数据集的标记。多个标记之间以英文逗号分隔。例如556741164180/env:prod,myProject/department:sales
。每个标记必须具有命名空间键名称和值简称。PROJECT_ID
:您要在其中创建数据集的项目的 ID。DATASET_ID
:新数据集的 ID。
Terraform
使用 google_bigquery_dataset
资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例会创建一个名为 my_dataset
的数据集,然后通过填充 resource_tags
字段将标记附加到该数据集:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
API
调用 datasets.insert
方法,并将标记添加到 resource_tags
字段。
将标记附加到现有数据集
创建标记后,您可以将其附加到现有数据集。对于任何给定的标记键,您只能将一个标记值附加到数据集。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在浏览器窗格中,展开您的项目,然后选择数据集。
在数据集信息部分中,点击
修改详细信息。展开标记部分。
如需应用现有标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择当前范围 - 选择当前组织或选择当前项目。
或者,点击选择范围以搜索资源或查看当前资源列表。
对于键 1 和值 1,请从列表中选择适当的值。
如需手动输入新标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择手动输入 ID > 组织、项目或标记。
如果您要为项目或组织创建标记,请在对话框中输入
PROJECT_ID
或ORGANIZATION_ID
,然后点击保存。对于键 1 和值 1,请从列表中选择适当的值。
可选:如需向表中添加其他标记,请点击添加标记,然后按照上面的步骤操作。
点击保存。
SQL
使用 ALTER SCHEMA SET OPTIONS
语句。
以下示例会覆盖现有数据集的所有标记。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER SCHEMA PROJECT_ID.DATASET_ID SET OPTIONS ( tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
以下示例使用 +=
运算符将标记附加到数据集,而不会覆盖现有标记。如果某个现有标记具有相同的键,则该标记会被覆盖。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER SCHEMA PROJECT_ID.DATASET_ID SET OPTIONS ( tags += [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用带有 --add_tags
标志的 bq update
命令:
bq update \ --add_tags=TAG \ PROJECT_ID:DATASET_ID
替换以下内容:
TAG
:您要附加到数据集的标记。多个标记之间以英文逗号分隔。例如556741164180/env:prod,myProject/department:sales
。每个标记必须具有命名空间键名称和值简称。PROJECT_ID
:现有数据集所在项目的 ID。DATASET_ID
:现有数据集的 ID。
gcloud
如需使用命令行将标记附加到数据集,请使用 gcloud resource-manager tags bindings create
命令创建标记绑定资源:
gcloud resource-manager tags bindings create \ --tag-value=TAG_VALUE_NAME \ --parent=RESOURCE_ID \ --location=LOCATION
替换以下内容:
TAG_VALUE_NAME
:要附加的标记值的永久 ID 或命名空间名称,例如tagValues/4567890123
或1234567/my_tag_key/my_tag_value
。RESOURCE_ID
:数据集的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/
),例如//bigquery.googleapis.com/projects/my_project/datasets/my_dataset
。LOCATION
:您的数据集所在的位置。
Terraform
向数据集的 resource_tags
字段添加标记,然后使用 google_bigquery_dataset
资源应用更新后的配置。如需了解详情,请参阅创建新数据集时附加标签中的 Terraform 示例。
API
调用 datasets.get
方法以获取数据集资源,包括 resource_tags
字段。将标记添加到 resource_tags
字段,然后使用 datasets.update
方法传递回更新后的数据集资源。
列出附加到数据集的标记
通过执行以下步骤,您可以获得直接附加到数据集的标记绑定的列表;这些方法不会返回从父级资源继承的标记。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在浏览器窗格中,展开您的项目,然后选择数据集。
标记会显示在数据集信息部分中。
bq
如需列出附加到数据集的标记,请使用 bq show
命令。
bq show PROJECT_ID:DATASET_ID
替换以下内容:
PROJECT_ID
:包含数据集的项目的 ID。DATASET_ID
:要为其列出标记的数据集的 ID。
gcloud
如需获取附加到资源的标记绑定的列表,请使用 gcloud resource-manager tags bindings list
命令:
gcloud resource-manager tags bindings list \ --parent=RESOURCE_ID \ --location=LOCATION
替换以下内容:
RESOURCE_ID
:数据集的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/
),例如//bigquery.googleapis.com/projects/my_project/datasets/my_dataset
。LOCATION
:您的数据集所在的位置。
输出类似于以下内容:
name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123 parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset tagValue: tagValues/4567890123
Terraform
使用 terraform state show
命令列出数据集的属性,包括 resource_tags
字段。在运行数据集的 Terraform 配置文件的目录中运行此命令。
terraform state show google_bigquery_dataset.default
API
调用 datasets.get
方法以获取数据集资源。数据集资源包含 resource_tags
字段中附加到数据集的标记。
视图
使用 INFORMATION_SCHEMA.SCHEMATA_OPTIONS
视图。
例如,以下查询会显示某个区域中所有数据集附加的所有标记。此查询会返回一个表,其中的列包括 schema_name
(数据集名称)、option_name
(始终为 'tags'
)、object_type
(始终为 ARRAY<STRUCT<STRING, STRING>>
)和 option_value
,该表包含 STRUCT
对象数组,表示与每个数据集关联的标记。对于未分配标记的数据集,option_value
列会返回一个空数组。
SELECT * from region-REGION.INFORMATION_SCHEMA.SCHEMATA_OPTIONS WHERE option_name='tags'
替换以下内容:
REGION
:您的数据集所在的区域。
从数据集分离标记
您可以通过删除标记绑定资源,从资源分离标记。 如果您要删除标记,必须先将其从数据集中分离,然后再删除。如需了解详情,请参阅删除标记。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在浏览器窗格中,展开您的项目,然后选择数据集。
在数据集信息部分中,点击
修改详细信息。在标记部分中,点击要删除的标记旁边的
删除项。点击保存。
SQL
使用 ALTER SCHEMA SET OPTIONS
语句。
以下示例使用 -=
运算符从数据集中分离标记。如需从数据集中分离所有标记,您可以指定 tags=NULL
或 tags=[]
。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID SET OPTIONS ( tags -= [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用带有 --remove_tags
标志的 bq update
命令:
bq update \ --remove_tags=REMOVED_TAG \ PROJECT_ID:DATASET_ID
替换以下内容:
REMOVED_TAG
:要从数据集中移除的标记。多个标记之间以英文逗号分隔。仅接受不带值的键对。例如556741164180/env,myProject/department
。 每个标记都必须具有命名空间键名称。PROJECT_ID
:包含数据集的项目的 ID。DATASET_ID
:要从中分离标记的数据集的 ID。
或者,如果您想从数据集中移除所有标记,请将 bq update
命令与 --clear_all_tags
标志结合使用:
bq update \ --clear_all_tags PROJECT_ID:DATASET_ID
gcloud
如需使用命令行从数据集中分离标记,请使用 gcloud resource-manager tags bindings delete
命令删除标记绑定:
gcloud resource-manager tags bindings delete \ --tag-value=TAG_VALUE_NAME \ --parent=RESOURCE_ID \ --location=LOCATION
替换以下内容:
TAG_VALUE_NAME
:要分离的标记值的永久 ID 或命名空间名称,例如tagValues/4567890123
或1234567/my_tag_key/my_tag_value
。RESOURCE_ID
:数据集的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/
),例如//bigquery.googleapis.com/projects/my_project/datasets/my_dataset
。LOCATION
:您的数据集所在的位置。
Terraform
从数据集的 resource_tags
字段中移除标记,然后使用 google_bigquery_dataset
资源应用更新后的配置。
API
调用 datasets.get
方法以获取数据集资源,包括 resource_tags
字段。从 resource_tags
字段中移除标记,然后使用 datasets.update
方法传递回更新后的数据集资源。
为表添加标记
以下部分介绍了如何将标记附加到新表和现有表、列出附加到表的标记,以及从表中分离标记。
在创建新表时附加标记
创建标记后,您可以将其附加到新表。对于任何给定的标记键,您只能将一个标记值附加到表。您最多可以为一个表附加 50 个标记。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,展开您的项目,然后选择数据集。
在数据集信息部分中,点击
创建表。输入新表格的信息。如需了解详情,请参阅创建和使用表。
展开标记部分。
如需应用现有标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择当前范围 - 选择当前组织或选择当前项目。
或者,点击选择范围以搜索资源或查看当前资源列表。
对于键 1 和值 1,请从列表中选择适当的值。
如需手动输入新标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择手动输入 ID > 组织、项目或标记。
如果您要为项目或组织创建标记,请在对话框中输入
PROJECT_ID
或ORGANIZATION_ID
,然后点击保存。对于键 1 和值 1,请从列表中选择适当的值。
可选:如需向表中添加其他标记,请点击添加标记,然后按照上面的步骤操作。
点击创建表。
SQL
使用 CREATE TABLE
语句。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE TABLE PROJECT_ID.DATASET_ID.TABLE_ID OPTIONS ( tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用带有 --add_tags
标志的 bq mk --table
命令:
bq mk --table \ --schema=SCHEMA \ --add_tags=TAG \ PROJECT_ID:DATASET_ID.TABLE_ID
替换以下内容:
SCHEMA
:内嵌架构定义。TAG
:要附加到新表的标记。多个标记之间以英文逗号分隔。例如556741164180/env:prod,myProject/department:sales
。每个标记必须具有命名空间键名称和值简称。PROJECT_ID
:要在其中创建表的项目的 ID。DATASET_ID
:要在其中创建表的数据集的 ID。TABLE_ID
:新表的 ID。
Terraform
使用 google_bigquery_table
资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例会创建一个名为 mytable
的表,然后通过填充 resource_tags
字段将标记附加到该表:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
API
使用定义的表资源调用 tables.insert
方法。在 resource_tags
字段中添加标记。
将标记附加到现有表
创建标记后,您可以将其附加到现有表。对于任何给定的标记键,您只能将一个标记值附加到表。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,展开您的项目和数据集,然后选择表。
点击详情标签页,然后点击
修改详情。展开标记部分。
如需应用现有标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择当前范围 - 选择当前组织或选择当前项目。
或者,点击选择范围以搜索资源或查看当前资源列表。
对于键 1 和值 1,请从列表中选择适当的值。
如需手动输入新标记,请执行以下操作:
点击选择范围旁边的下拉箭头,然后选择手动输入 ID > 组织、项目或标记。
如果您要为项目或组织创建标记,请在对话框中输入
PROJECT_ID
或ORGANIZATION_ID
,然后点击保存。对于键 1 和值 1,请从列表中选择适当的值。
可选:如需向表中添加其他标记,请点击添加标记,然后按照上面的步骤操作。
点击保存。
SQL
使用 ALTER TABLE SET OPTIONS
语句。
以下示例会覆盖现有表的所有标记。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID SET OPTIONS ( tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
以下示例使用 +=
运算符将标记附加到表,而不会覆盖现有标记。如果某个现有标记具有相同的键,则该标记会被覆盖。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID SET OPTIONS ( tags += [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用带有 --add_tags
标志的 bq update
命令:
bq update \ --add_tags=TAG \ PROJECT_ID:DATASET_ID.TABLE_ID
替换以下内容:
TAG
:要附加到表的标记。多个标记之间以英文逗号分隔。例如556741164180/env:prod,myProject/department:sales
。每个标记必须具有命名空间键名称和值简称。PROJECT_ID
:包含表的项目的 ID。DATASET_ID
:包含表的数据集的 ID。TABLE_ID
:您要更新的表的 ID。
gcloud
如需使用命令行将标记附加到表,请使用 gcloud resource-manager tags bindings create
命令创建标记绑定资源:
gcloud resource-manager tags bindings create \ --tag-value=TAG_VALUE_NAME \ --parent=RESOURCE_ID \ --location=LOCATION
替换以下内容:
TAG_VALUE_NAME
:要附加的标记值的永久 ID 或命名空间名称,例如tagValues/4567890123
或1234567/my_tag_key/my_tag_value
。RESOURCE_ID
:表的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/
)。例如,//bigquery.googleapis.com/projects/my_project/datasets/my_dataset/tables/my_table
LOCATION
:表的位置。
Terraform
向表的 resource_tags
字段添加标记,然后使用 google_bigquery_table
资源应用更新后的配置。如需了解详情,请参阅在创建新表时附加标签中的 Terraform 示例。
API
使用定义的表资源调用 tables.update
方法。在 resource_tags
字段中添加标记。
列出附加到表的标记
您可以列出直接附加到表的标记。此过程不会列出从父级资源继承的标记。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,展开您的项目和数据集,然后选择表。
这些标记会显示在详细信息标签页中。
bq
使用 bq show
命令并查找 tags
列。如果表中没有标记,则不会显示 tags
列。
bq show \ PROJECT_ID:DATASET_ID.TABLE_ID
替换以下内容:
PROJECT_ID
:包含表的项目的 ID。DATASET_ID
:包含表的数据集的 ID。TABLE_ID
:表的 ID。
gcloud
如需获取附加到资源的标记绑定的列表,请使用 gcloud resource-manager tags bindings list
命令:
gcloud resource-manager tags bindings list \ --parent=RESOURCE_ID \ --location=LOCATION
替换以下内容:
RESOURCE_ID
:表的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/
)。例如//bigquery.googleapis.com/projects/my_project/datasets/my_dataset/tables/my_table
。LOCATION
:您的数据集所在的位置。
输出类似于以下内容:
name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123 parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset tagValue: tagValues/4567890123
Terraform
使用 terraform state show
命令列出表的属性,包括 resource_tags
字段。在运行表的 Terraform 配置文件的目录中运行此命令。
terraform state show google_bigquery_table.default
API
使用定义的表资源调用 tables.get
方法,并查找 resource_tags
字段。
视图
使用 INFORMATION_SCHEMA.TABLE_OPTIONS
视图。
例如,以下查询会显示数据集中所有表附加的所有标记。此查询会返回一个表,其中的列包括 schema_name
(数据集名称)、option_name
(始终为 'tags'
)、object_type
(始终为 ARRAY<STRUCT<STRING, STRING>>
)和 option_value
,该表包含 STRUCT
对象数组,表示与每个数据集关联的标记。对于未分配标记的表,option_value
列会返回一个空数组。
SELECT * from DATASET_ID.INFORMATION_SCHEMA.TABLE_OPTIONS WHERE option_name='tags'
将 DATASET_ID
替换为包含表的数据集的 ID。
从表中分离标记
您可以通过删除标记绑定来从表中移除标记关联。如果您要删除标记,必须先将其从表中分离,然后再删除。如需了解详情,请参阅删除标记。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,展开您的项目和数据集,然后选择表。
点击详情标签页,然后点击
修改详情。在标记部分中,点击要删除的标记旁边的
删除项。点击保存。
SQL
使用 ALTER TABLE SET OPTIONS
语句。
以下示例使用 -=
运算符从表中分离标记。如需从表中分离所有标记,您可以指定 tags=NULL
或 tags=[]
。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID SET OPTIONS ( tags -= [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)
请替换以下内容:
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
如需从表中移除某些标记,请将 bq update
命令与 --remove_tags
标志结合使用:
bq update \ --remove_tags=TAG_KEYS \ PROJECT_ID:DATASET_ID.TABLE_ID
替换以下内容:
TAG_KEYS
:要从表中分离的标记键,以英文逗号分隔。例如556741164180/env,myProject/department
。每个标记键都必须具有命名空间键名称。PROJECT_ID
:包含表的项目的 ID。DATASET_ID
:包含表的数据集的 ID。TABLE_ID
:您要更新的表的 ID。
如需从表中移除所有标记,请将 bq update
命令与 --clear_all_tags
标志结合使用:
bq update \ --clear_all_tags \ PROJECT_ID:DATASET_ID.TABLE_ID
gcloud
如需使用命令行从表中移除标记关联,请使用 gcloud resource-manager tags bindings delete
命令删除标记绑定:
gcloud resource-manager tags bindings delete \ --tag-value=TAG_VALUE_NAME \ --parent=RESOURCE_ID \ --location=LOCATION
替换以下内容:
TAG_VALUE_NAME
:要删除的标记值的永久 ID 或命名空间名称,例如tagValues/4567890123
或1234567/my_tag_key/my_tag_value
。RESOURCE_ID
:表的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/
)。例如//bigquery.googleapis.com/projects/my_project/datasets/my_dataset/tables/my_table
。LOCATION
:您的数据集所在的位置。
Terraform
从表的 resource_tags
字段中移除标记,然后使用 google_bigquery_table
资源应用更新后的配置。
API
使用定义的表资源调用 tables.update
方法,并移除 resource_tags
字段中的标记。如需移除所有标记,请移除 resource_tags
字段。
为其他类似表格资源添加标记
您也可以以类似的方式为 BigQuery 视图、物化视图、克隆和快照添加标记。
删除标记
如果某个标记被表、视图或数据集引用,则无法删除该标记。您应该先删除所有现有标记绑定资源,然后再删除标记键或标记值本身。如需删除标记键和标记值,请参阅删除标记。
示例
假设您是组织的管理员。 您的数据分析师都是群组 analysts@example.com 的成员,他们具有项目 userData
的 BigQuery Data Viewer IAM 角色。您的公司聘请了一些实习数据分析师,根据公司政策,他们只应有权查看 userData
项目中的 anonymousData
数据集。您可以使用标记来控制他们的访问权限。
使用键
employee_type
和值intern
创建标记:在 Google Cloud 控制台中,前往 IAM 页面。
找到要限制其数据集访问权限的实习生所在的行,然后点击该行中的
修改主账号。从角色菜单中,选择 BigQuery Data Viewer。
点击添加条件。
在标题和说明字段中,输入用于描述要创建的 IAM 标记条件的值。
在条件构建器标签页上,点击添加。
在条件类型菜单中,选择资源,然后选择标记。
在运算符菜单中,选择包含值。
在值路径字段中,输入
ORGANIZATION/TAG_KEY/TAG_VALUE
格式的标记值路径,例如example.org/employee_type/intern
。此 IAM 标记条件会限制实习生对具有
intern
标记的数据集的访问权限。如需保存标记条件,请点击保存。
如需保存您在修改权限窗格中所做的任何更改,请点击保存。
如需将
intern
标记值附加到anonymousData
数据集,请使用命令行运行gcloud resource-manager tags bindings create
命令。例如:gcloud resource-manager tags bindings create \ --tag-value=tagValues/4567890123 \ --parent=//bigquery.googleapis.com/projects/userData/datasets/anonymousData \ --location=US
后续步骤
- 如需大致了解 Google Cloud中的标记,请参阅标记概览。
- 如需了解如何使用标记,请参阅创建和管理标记。
- 如需了解如何使用 IAM 条件控制对 BigQuery 资源的访问权限,请参阅使用 IAM 条件控制访问权限。