删除标签

您可以通过以下方式删除数据集、表或视图中的标签:

准备工作

授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。 执行任务所需的权限(如果有)列出在任务的“所需权限”部分中。

删除数据集标签

以下部分指定删除数据集标签的权限和步骤。

所需权限

如需删除数据集标签,您需要拥有以下 IAM 权限:

  • bigquery.datasets.get
  • bigquery.datasets.update

以下每个预定义 IAM 角色都包含删除数据集标签所需的权限:

  • roles/bigquery.dataOwner
  • roles/bigquery.admin

此外,如果您拥有 bigquery.datasets.create 权限,则可以删除自己创建的数据集的标签。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限

删除数据集标签

如需删除数据集的标签,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,选择相应的数据集。

  2. 在数据集详情页面上,点击标签右侧的铅笔图标。

    标签铅笔

  3. 修改标签对话框中:

    • 对于要删除的每个标签,点击删除 (X)。
    • 如需保存更改,请点击更新

SQL

使用 ALTER SCHEMA SET OPTIONS DDL 语句在现有数据集上设置标签。设置标签会覆盖数据集中的所有现有标签。以下示例将删除数据集 mydataset 上的所有标签:

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    ALTER SCHEMA mydataset
    SET OPTIONS (labels = []);
    

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

如需删除数据集标签,请发出带 clear_label 标志的 bq update 命令。重复使用该标志可以指定多个标签。

如果数据集属于非默认项目,请按以下格式将相应项目 ID 添加到数据集:project_id:dataset

bq update \
--clear_label key \
project_id:dataset

其中:

  • key 是要删除的标签的键。
  • project_id 是项目 ID。
  • dataset 是要更新的数据集。

示例:

如需删除 mydatasetdepartment:shipping 标签,请输入带 --clear_label 标志的 bq update 命令。mydataset 属于默认项目。

    bq update --clear_label department mydataset

如需删除 myotherprojectmydatasetdepartment:shipping 标签,请输入带 --clear_label 标志的 bq update 命令。

    bq update --clear_label department myotherproject:mydataset

如需删除数据集的多个标签,请重复使用 clear_label 标志并指定每个标签的键。例如,如需删除默认项目中 mydatasetdepartment:shipping 标签和 cost_center:logistics 标签,请输入:

    bq update \
    --clear_label department \
    --clear_label cost_center \
    mydataset

对于每个示例,输出内容如下所示:

Dataset 'myproject:mydataset' successfully updated.

API

如需删除现有数据集的特定标签,请调用 datasets.patch 方法,然后将该标签的键值设置为 null,以更新数据集资源labels 属性。

如需删除数据集的所有标签,请调用 datasets.patch 方法并删除 labels 属性。

由于 datasets.update 方法会替换整个数据集资源,因此最好使用 datasets.patch 方法。

Go

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteDatasetLabel demonstrates removing a specific label from a dataset's metadata.
func deleteDatasetLabel(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.DatasetMetadataToUpdate{}
	update.DeleteLabel("color")
	if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.HashMap;
import java.util.Map;

// Sample tp deletes a label on a dataset.
public class DeleteLabelDataset {

  public static void runDeleteLabelDataset() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    deleteLabelDataset(datasetName);
  }

  public static void deleteLabelDataset(String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // This example dataset starts with existing label { color: 'green' }
      Dataset dataset = bigquery.getDataset(datasetName);
      // Add label to dataset
      Map<String, String> labels = new HashMap<>();
      labels.put("color", null);

      dataset.toBuilder().setLabels(labels).build().update();
      System.out.println("Dataset label deleted successfully");
    } catch (BigQueryException e) {
      System.out.println("Dataset label was not deleted. \n" + e.toString());
    }
  }
}

Node.js

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteLabelDataset() {
  // Deletes a label on a dataset.
  // This example dataset starts with existing label { color: 'green' }

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';

  // Retrieve current dataset metadata.
  const dataset = bigquery.dataset(datasetId);
  const [metadata] = await dataset.getMetadata();

  // Add label to dataset metadata
  metadata.labels = {color: null};
  const [apiResponse] = await dataset.setMetadata(metadata);

  console.log(`${datasetId} labels:`);
  console.log(apiResponse.labels);
}

Python

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = "your-project.your_dataset"

dataset = client.get_dataset(dataset_id)  # Make an API request.

# To delete a label from a dataset, set its value to None.
dataset.labels["color"] = None

dataset = client.update_dataset(dataset, ["labels"])  # Make an API request.
print("Labels deleted from {}".format(dataset_id))

删除表或视图标签

您可以通过以下方式删除表或视图标签:

  • 使用 Google Cloud 控制台
  • 使用 SQL DDL 语句
  • 使用 bq 命令行工具的 bq update 命令
  • 调用 tables.patch API 方法
    • 由于视图被视为表资源,因此您可以使用 tables.patch 修改视图和表。
  • 使用客户端库

所需权限

如需删除表标签或视图标签,您需要拥有以下 IAM 权限:

  • bigquery.tables.get
  • bigquery.tables.update

以下每个预定义 IAM 角色都包含删除表或视图标签所需的权限:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

此外,如果您拥有 bigquery.datasets.create 权限,则可以删除自己创建的数据集中的表和视图标签。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限

删除表或视图标签

如需删除表或视图的标签,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,选择相应的数据集。

  2. 点击详细信息标签页,然后点击标签右侧的铅笔图标。

    标签铅笔

  3. 修改标签对话框中:

    • 对于要删除的每个标签,点击删除 (X)。

      标签删除

    • 如需保存更改,请点击更新

SQL

使用 ALTER TABLE SET OPTIONS DDL 语句在现有表上设置标签,或使用 ALTER VIEW SET OPTIONS DDL 语句 在现有视图上设置标签。设置标签会覆盖表或视图上的所有现有标签。以下示例删除表 mytable 的所有标签:

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    ALTER TABLE mydataset.mytable
    SET OPTIONS (labels = []);
    

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

如需删除表或视图的标签,请发出带 clear_label 标志的 bq update 命令。重复使用该标志可以指定多个标签。

如果表或视图属于非默认项目,请按以下格式将相应项目 ID 添加到数据集:project_id:dataset

bq update \
--clear_label key \
project_id:dataset.table_or_view

其中:

  • key 是要删除的标签的键。
  • project_id 是项目 ID。
  • dataset 是要更新的数据集。
  • table_or_view 是要更新的表或视图的名称。

示例:

如需删除 mydataset.mytabledepartment:shipping 标签,请输入带 --clear_label 标志的 bq update 命令。mydataset 属于默认项目。

    bq update --clear_label department mydataset.mytable

如需删除 myotherprojectmydataset.myviewdepartment:shipping 标签,请输入带 --clear_label 标志的 bq update 命令。

    bq update --clear_label department myotherproject:mydataset.myview

如需删除表或视图的多个标签,请重复使用 clear_label 标志并指定每个标签的键。例如,如需删除默认项目中 mydataset.mytabledepartment:shipping 标签和 cost_center:logistics 标签,请输入:

    bq update \
    --clear_label department \
    --clear_label cost_center \
    mydataset.mytable

对于每个示例,输出内容如下所示:

Table 'myproject:mydataset.mytable' successfully updated.

API

如需删除现有表或试图的特定标签,请调用 tables.patch 方法,然后将该标签的键值设置为 null,以更新表资源labels 属性。

如需删除表或视图的所有标签,请调用 tables.patch 方法并删除 labels 属性。

由于视图被视为表资源,因此您可以使用 tables.patch 方法修改视图和表。另外,由于 tables.update 方法会替换整个数据集资源,因此最好使用 tables.patch 方法。

Go

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteTableLabel demonstrates how to remove a specific metadata Label from a BigQuery table.
func deleteTableLabel(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tbl := client.Dataset(datasetID).Table(tableID)
	meta, err := tbl.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{}
	update.DeleteLabel("color")
	if _, err := tbl.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;
import java.util.HashMap;
import java.util.Map;

// Sample tp deletes a label on a table.
public class DeleteLabelTable {

  public static void runDeleteLabelTable() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    deleteLabelTable(datasetName, tableName);
  }

  public static void deleteLabelTable(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // This example table starts with existing label { color: 'green' }
      Table table = bigquery.getTable(TableId.of(datasetName, tableName));
      // Add label to table
      Map<String, String> labels = new HashMap<>();
      labels.put("color", null);

      table.toBuilder().setLabels(labels).build().update();
      System.out.println("Table label deleted successfully");
    } catch (BigQueryException e) {
      System.out.println("Table label was not deleted. \n" + e.toString());
    }
  }
}

Node.js

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteLabelTable() {
  // Deletes a label from an existing table.
  // This example dataset starts with existing label { color: 'green' }

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  const dataset = bigquery.dataset(datasetId);
  const [table] = await dataset.table(tableId).get();

  // Retrieve current table metadata
  const [metadata] = await table.getMetadata();

  // Add label to table metadata
  metadata.labels = {color: null};
  const [apiResponse] = await table.setMetadata(metadata);

  console.log(`${tableId} labels:`);
  console.log(apiResponse.labels);
}

Python

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

from google.cloud import bigquery

client = bigquery.Client()

# TODO(dev): Change table_id to the full name of the table you wish to delete from.
table_id = "your-project.your_dataset.your_table_name"
# TODO(dev): Change label_key to the name of the label you want to remove.
label_key = "color"
table = client.get_table(table_id)  # API request

# To delete a label from a table, set its value to None
table.labels[label_key] = None

table = client.update_table(table, ["labels"])  # API request

print(f"Deleted label '{label_key}' from {table_id}.")

删除作业标签

目前不支持删除现有作业的标签。

后续步骤