获取模型元数据

概览

本页面介绍如何获取 BigQuery ML 模型的相关信息或元数据。您可以通过以下方式获取模型元数据:

  • 使用 Google Cloud 控制台
  • 使用 bq show CLI 命令
  • 直接调用或使用客户端库调用 models.get API 方法

所需权限

如需获取模型元数据,您必须拥有数据集的 READER 角色,或者必须拥有具备 bigquery.models.getMetadata 权限的项目级 Identity and Access Management (IAM) 角色。如果您拥有项目级层的 bigquery.models.getMetadata 权限,则可以获取项目中任何数据集中模型的元数据。以下预定义的项目级 IAM 角色具有 bigquery.models.getMetadata 权限:

  • bigquery.dataViewer
  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.metadataViewer
  • bigquery.admin

如需详细了解 BigQuery ML 中的 IAM 角色和权限,请参阅访问权限控制

获取模型元数据

要获取有关模型的元数据,请执行以下操作:

控制台

  1. 在导航面板的资源部分中,展开您的项目并选择数据集。

  2. 点击模型名称。

  3. 在查询编辑器框下方,点击详细信息。此页面显示模型的元数据,包括说明、标签、详细信息和训练选项。

    Google Cloud 控制台中的模型元数据

bq

发出带有 --model-m 标志的 bq show 命令以显示模型元数据。--format 标志可用于控制输出。

要想仅查看模型的特征列,请将 --schema 标志与 --model 标志搭配使用。使用 --schema 标志时,必须将 --format 设置为 jsonprettyjson

如果您要获取非默认项目中的模型信息,请按以下格式将相应项目 ID 添加到数据集中:[PROJECT_ID]:[DATASET]

bq show --model --format=prettyjson [PROJECT_ID]:[DATASET].[MODEL]

其中:

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

使用 --format=pretty 标志时,命令输出如下所示。要查看完整的详细信息,请使用 --format=prettyjson 格式。该示例输出显示了逻辑回归模型的元数据。

+--------------+---------------------+---------------------+---------------------------+--------+-----------------+-----------------+
|      Id      |     Model Type      |   Feature Columns   |       Label Columns       | Labels |  Creation Time  | Expiration Time |
+--------------+---------------------+---------------------+---------------------------+--------+-----------------+-----------------+
| sample_model | LOGISTIC_REGRESSION | |- column1: string  | |- label_column: int64    |        | 03 May 23:14:42 |                 |
|              |                     | |- column2: bool    |                           |        |                 |                 |
|              |                     | |- column3: string  |                           |        |                 |                 |
|              |                     | |- column4: int64   |                           |        |                 |                 |
+--------------+---------------------+---------------------+---------------------------+--------+-----------------+-----------------+

示例:

输入以下命令可显示 mydataset 中有关 mymodel 的所有信息。mydataset 属于默认项目。

bq show --model --format=prettyjson mydataset.mymodel

输入以下命令可显示 mydataset 中有关 mymodel 的所有信息。mydatasetmyotherproject 中,不在默认项目中。

bq show --model --format=prettyjson myotherproject:mydataset.mymodel

输入以下命令可仅显示 mydatasetmymodel 的特征列。mydatasetmyotherproject 中,不在默认项目中。

bq show --model --schema --format=prettyjson \
myotherproject:mydataset.mymodel

API

要使用 API 获取模型元数据,请调用 models.get 方法并提供 projectIddatasetIdmodelId

Go

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

import (
	"context"
	"fmt"
	"io"

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

// printModelInfo demonstrates fetching metadata about a BigQuery ML model and printing some of
// it to an io.Writer.
func printModelInfo(w io.Writer, 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: %w", err)
	}
	defer client.Close()

	meta, err := client.Dataset(datasetID).Model(modelID).Metadata(ctx)
	if err != nil {
		return fmt.Errorf("couldn't retrieve metadata: %w", err)
	}
	fmt.Fprintf(w, "Got model '%q' with friendly name '%q'\n", modelID, meta.Name)
	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.Model;
import com.google.cloud.bigquery.ModelId;

public class GetModel {

  public static void runGetModel() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String modelName = "MY_MODEL_ID";
    getModel(datasetName, modelName);
  }

  public static void getModel(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();

      ModelId modelId = ModelId.of(datasetName, modelName);
      Model model = bigquery.getModel(modelId);
      System.out.println("Model: " + model.getDescription());

      System.out.println("Successfully retrieved model");
    } catch (BigQueryException e) {
      System.out.println("Cannot retrieve model \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 getModel() {
  // Retrieves model named "my_existing_model" in "my_dataset".

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

  const dataset = bigquery.dataset(datasetId);
  const [model] = await dataset.model(modelId).get();

  console.log('Model:');
  console.log(model.metadata.modelReference);
}

Python

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证


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'

model = client.get_model(model_id)  # Make an API request.

full_model_id = "{}.{}.{}".format(model.project, model.dataset_id, model.model_id)
friendly_name = model.friendly_name
print(
    "Got model '{}' with friendly_name '{}'.".format(full_model_id, friendly_name)
)

后续步骤