删除模型

本页面介绍如何删除 BigQuery ML 模型。您可以通过以下方式删除模型:

  • 使用 Cloud Console
  • 使用 bq 命令行工具的 bq rm 命令或 bq query 命令
  • 调用 models.delete API 方法或调用 jobs.query 方法
  • 使用客户端库

目前,您每次只能删除一个模型。删除模型时,该模型中的任何数据也将被删除。

如需在指定的时间段后自动删除模型,请在使用 bq 命令行工具、API 或客户端库创建模型时设置模型的到期时间。如果在创建模型时未设置到期时间,则可以更新模型的到期时间

删除模型的限制

删除模型受到以下限制:

  • 您不能同时删除多个模型。您必须逐个删除它们。
  • 您无法恢复已删除的模型。

所需权限

如需删除数据集中的模型,您必须拥有数据集的 WRITER 角色,或者必须拥有具备 bigquery.models.delete 权限的项目级 IAM 角色。如果您拥有项目级的 bigquery.models.delete 权限,则可以删除项目中任何数据集中的模型。以下项目级 IAM 角色包含 bigquery.models.delete 权限:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

如需详细了解 BigQuery ML 中 IAM 角色和权限,请参阅访问权限控制。如需详细了解数据集级角色,请参阅 BigQuery 文档中的基本角色和权限

删除模型

如需删除模型,请执行以下操作:

控制台

您可以在 Cloud Console 中删除模型,方法是使用删除模型选项或运行包含 DROP MODEL | DROP MODEL IF EXISTS DDL 语句的查询。

方式一:使用删除模型选项。

  1. 转到 Cloud Console 中的 BigQuery 页面。

    转到 BigQuery 页面

  2. 在导航面板的资源部分中,展开项目名称和数据集名称。

  3. 点击您的模型名称。模型由模型图标 模型图标 表示。

  4. 点击窗口右侧的删除模型

  5. 删除模型对话框中,输入模型名称,然后点击删除

方式二:使用 DDL 语句。

  1. 转到 Cloud Console 中的 BigQuery 页面。

    转到 BigQuery 页面

  2. 点击编写新查询

  3. 查询编辑器文本区域中,键入您的 DDL 语句。

     DROP MODEL mydataset.mymodel

  4. 点击运行。完成查询后,系统会从导航窗格中移除该模型。

bq

您可以使用 bq 命令行工具删除模型,方法如下:

  • 输入带 --model-m 标志的 bq rm 命令
  • 输入将 DDL 语句用作查询参数的 bq query 命令

如果您要删除非默认项目中的模型,请按以下格式将相应项目 ID 添加到数据集内:[PROJECT_ID]:[DATASET].[MODEL]

方式一:输入 bq rm 命令

使用 bq rm 命令移除模型时,必须确认该操作。您可以使用 --force flag(或 -f 快捷方式)跳过确认。

bq rm -f --model [PROJECT_ID]:[DATASET].[MODEL]

其中:

  • [PROJECT_ID] 是项目 ID。
  • [DATASET] 是数据集的名称。
  • [MODEL] 是要删除的模型的名称。

rm 命令没有任何输出。

示例:

输入以下命令可从 mydataset 删除 mymodelmydataset 在默认项目中。

bq rm --model mydataset.mymodel

输入以下命令可从 mydataset 删除 mymodelmydatasetmyotherproject 中,不在默认项目中。

bq rm --model myotherproject:mydataset.mymodel

输入以下命令可从 mydataset 删除 mymodelmydataset 在默认项目中。该命令使用 -f 快捷方式绕过确认。

bq rm -f --model mydataset.mymodel

您可以通过发出 bq ls 命令来确认模型已删除。如需了解详情,请参阅列出模型

方式二:输入 bq query 命令

要通过使用 bq query 命令删除模型,请在查询参数中提供 DROP MODEL 语句,并提供 --use_legacy_sql=false 标志以指定标准 SQL 查询语法。

示例:

输入以下命令可从 mydataset 删除 mymodelmydataset 在默认项目中。

bq query --use_legacy_sql=false 'DROP MODEL mydataset.mymodel'

输入以下命令可从 mydataset 删除 mymodelmydatasetmyotherproject 中,不在默认项目中。

bq query --use_legacy_sql=false \
'DROP MODEL myotherproject:mydataset.mymodel'

API

方式一:调用 models.delete 方法

要删除模型,请调用 models.delete 方法并提供 projectIddatasetIdmodelId

方式二:调用 jobs.query 方法

要删除模型,请调用 jobs.query 方法并在请求正文的 query 属性中提供 DROP MODEL DDL 语句。

Go

import (
	"context"
	"fmt"

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

// deleteModel demonstrates deletion of BigQuery ML model.
func deleteModel(projectID, datasetID, modelID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// modelID := "mymodel"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	model := client.Dataset(datasetID).Model(modelID)
	if err := model.Delete(ctx); err != nil {
		return fmt.Errorf("Delete: %v", err)
	}
	return nil
}

Java

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.ModelId;

// Sample to delete a model
public class DeleteModel {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String modelName = "MY_MODEL_NAME";
    deleteModel(datasetName, modelName);
  }

  public static void deleteModel(String datasetName, String modelName) {
    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();
      boolean success = bigquery.delete(ModelId.of(datasetName, modelName));
      if (success) {
        System.out.println("Model deleted successfully");
      } else {
        System.out.println("Model was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Model was not deleted. \n" + e.toString());
    }
  }
}

Node.js

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

async function deleteModel() {
  // Deletes a model named "my_model" from "my_dataset".

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

  const dataset = bigquery.dataset(datasetId);
  const model = dataset.model(modelId);
  await model.delete();

  console.log(`Model ${modelId} deleted.`);
}

Python


from google.cloud import bigquery

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

# TODO(developer): Set model_id to the ID of the model to fetch.
# model_id = 'your-project.your_dataset.your_model'

client.delete_model(model_id)  # Make an API request.

print("Deleted model '{}'.".format(model_id))

恢复已删除的模型

目前,您无法恢复已删除的模型。

后续步骤