Como receber metadados do modelo

Visão geral

Nesta página, você verá como receber informações ou metadados relativos aos modelos do BigQuery ML. É possível fazer isso:

  • usando o Console do Cloud;
  • usando o comando bq show da CLI;
  • chamando o método da API models.get diretamente ou usando as bibliotecas de cliente.

Permissões necessárias

Para obter os metadados do modelo, você deve receber o papel READER no conjunto de dados ou um papel do IAM para envolvidos no projeto que inclua permissões bigquery.models.getMetadata. Se você receber as permissões bigquery.models.getMetadata no nível do projeto, poderá obter os metadados em modelos de qualquer conjunto de dados no projeto. Os seguintes papéis predefinidos do IAM para envolvidos no projeto incluem permissões bigquery.models.getMetadata:

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

Para informações sobre papéis e permissões do IAM no BigQuery ML, consulte Controle de acesso. Para saber mais sobre os papéis no nível do conjunto de dados, consulte Papéis primários para conjuntos de dados na documentação do BigQuery.

Como receber metadados do modelo

Para receber metadados sobre modelos:

Console

  1. Na seção Recursos do painel de navegação, expanda o projeto e selecione um conjunto de dados.

  2. Clique no nome do modelo.

  3. Abaixo da caixa do editor de consultas, clique em Detalhes. Nesta página, os metadados do modelo são exibidos, incluindo a descrição, os rótulos, os detalhes e as opções de treinamento.

    Metadados de modelo no Console do Google Cloud

CLI

Emita o comando bq show com a sinalização --model ou -m para exibir os metadados do modelo. A sinalização --format pode ser usada para controlar a saída.

Para ver somente as colunas de recurso do seu modelo, use a sinalização --schema com a sinalização --model. Quando você usa a sinalização --schema, --format deve ser definido como json ou prettyjson.

Se você estiver recebendo informações sobre um modelo em um projeto diferente do seu projeto padrão, adicione o código do projeto ao conjunto de dados no seguinte formato: [PROJECT_ID]:[DATASET].

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

Em que:

  • [PROJECT_ID] é o ID do projeto.
  • [DATASET] é o nome do conjunto de dados.
  • [MODEL] é o nome do modelo.

A resposta ao comando será semelhante à seguinte quando a sinalização --format=pretty for usada. Para ver todos os detalhes, use o formato --format=prettyjson. O exemplo de saída mostra metadados para um modelo de regressão logística.

+--------------+---------------------+---------------------+---------------------------+--------+-----------------+-----------------+
|      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   |                           |        |                 |                 |
+--------------+---------------------+---------------------+---------------------------+--------+-----------------+-----------------+

Exemplos:

Digite o comando a seguir para exibir todas as informações sobre mymodel em mydataset. mydataset está em seu projeto padrão.

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

Digite o comando a seguir para exibir todas as informações sobre mymodel em mydataset. mydataset está em myotherproject, e não no seu projeto padrão.

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

Digite o comando a seguir para exibir somente as colunas de atributo para mymodel em mydataset. mydataset está em myotherproject, e não no seu projeto padrão.

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

API

Para receber os metadados do modelo usando a API, chame o método models.get e forneça projectId, datasetId e modelId.

Go

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: %v", err)
	}
	defer client.Close()

	meta, err := client.Dataset(datasetID).Model(modelID).Metadata(ctx)
	if err != nil {
		return fmt.Errorf("Metadata: %v", err)
	}
	fmt.Fprintf(w, "Got model '%q' with friendly name '%q'\n", modelID, meta.Name)
	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.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

// 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


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)
)

A seguir