Enumera modelos

Descripción general

En esta página, se muestra cómo crear una lista de los modelos de BigQuery ML en un conjunto de datos. Para crear una lista de los modelos de BigQuery ML, puedes hacer lo siguiente:

  • Usar Cloud Console
  • Usar el comando bq ls de la CLI
  • Llamar directamente al método models.list de la API o usar las bibliotecas cliente

Permisos necesarios

Para enumerar modelos en un conjunto de datos, se te debe asignar la función READER en el conjunto de datos o una función de IAM a nivel de proyecto que incluya permisos bigquery.models.list. Si se te otorgan permisos bigquery.models.list a nivel de proyecto, puedes enumerar modelos en cualquier conjunto de datos del proyecto. Las siguientes funciones predefinidas de IAM a nivel de proyecto incluyen los permisos bigquery.models.list:

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

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery ML, consulta Control de acceso. Si deseas obtener más información sobre las funciones a nivel del conjunto de datos, consulta Funciones básicas para conjuntos de datos en la documentación de BigQuery.

Enumera modelos

Para enumerar los modelos en un conjunto de datos, haz lo siguiente:

Console

  1. Ve a la IU web de BigQuery en Cloud Console.

    Ir a la IU web de BigQuery

  2. En el panel de navegación, en la sección Recursos, haz clic en el nombre de tu proyecto.

  3. A medida que expandes cada uno de los conjuntos de datos en un proyecto, se enumeran los modelos junto con los otros recursos de BigQuery en los conjuntos de datos. Los modelos se indican con el ícono del modelo: Ícono del modelo.

CLI

Emite el comando bq ls con la marca --models o -m. Se puede usar la marca --format para controlar el resultado. Si enumeras modelos en un proyecto que no sea tu proyecto predeterminado, agrega el ID del proyecto al conjunto de datos en el siguiente formato: [PROJECT_ID]:[DATASET].

bq ls -m --format=pretty [PROJECT_ID]:[DATASET]

Donde:

  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos.

El resultado del comando se verá de la siguiente manera cuando se usa la marca --format=pretty. --format=pretty produce un resultado de tabla formateada. La columna Model Type muestra el tipo de modelo, por ejemplo, KMEANS.

+-------------------------+------------+--------+-----------------+
|           Id            | Model Type | Labels |  Creation Time  |
+-------------------------+------------+--------+-----------------+
| mymodel                 | KMEANS     |        | 03 May 03:02:27 |
+-------------------------+------------+--------+-----------------+

Ejemplos:

Ingresa el siguiente comando para enumerar modelos en el conjunto de datos mydataset en tu proyecto predeterminado.

bq ls --models --format=pretty mydataset

Ingresa el siguiente comando para enumerar los modelos en el conjunto de datos mydataset en myotherproject. Este comando usa el acceso directo -m para enumerar modelos.

bq ls -m --format=pretty myotherproject:mydataset

API

Para enumerar modelos mediante la API, llama al método models.list y proporciona projectId y datasetId.

Go

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listModels demonstrates iterating through the collection of ML models in a dataset
// and printing a basic identifier of the model.
func listModels(w io.Writer, 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()

	fmt.Fprintf(w, "Models contained in dataset %q\n", datasetID)
	it := client.Dataset(datasetID).Models(ctx)
	for {
		m, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Model: %s\n", m.FullyQualifiedName())
	}
	return nil
}

Java

import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.ModelListOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Model;

public class ListModels {

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

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

      Page<Model> models = bigquery.listModels(datasetName, ModelListOption.pageSize(100));
      if (models == null) {
        System.out.println("Dataset does not contain any models.");
        return;
      }
      models
          .iterateAll()
          .forEach(model -> System.out.printf("Success! Model ID: %s", model.getModelId()));
    } catch (BigQueryException e) {
      System.out.println("Models not listed in dataset due to error: \n" + e.toString());
    }
  }
}

Node.js


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

async function listModels() {
  // Lists all existing models in the dataset.

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

  const dataset = bigquery.dataset(datasetId);

  dataset.getModels().then(data => {
    const models = data[0];
    console.log('Models:');
    models.forEach(model => console.log(model.metadata));
  });
}

Python


from google.cloud import bigquery

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

# TODO(developer): Set dataset_id to the ID of the dataset that contains
#                  the models you are listing.
# dataset_id = 'your-project.your_dataset'

models = client.list_models(dataset_id)  # Make an API request.

print("Models contained in '{}':".format(dataset_id))
for model in models:
    full_model_id = "{}.{}.{}".format(
        model.project, model.dataset_id, model.model_id
    )
    friendly_name = model.friendly_name
    print("{}: friendly_name='{}'".format(full_model_id, friendly_name))

Próximos pasos