モデルの一覧表示

概要

このページでは、データセット内の BigQuery ML モデルを一覧表示する方法について説明します。BigQuery ML モデルは、次の方法で一覧表示できます。

  • Cloud Console を使用する
  • bq ls CLI コマンドを使用する
  • models.list API メソッドを、直接またはクライアント ライブラリを使用して呼び出す

必要な権限

データセット内のモデルを一覧表示するには、データセットに対する READER 役割が割り当てられているか、bigquery.models.list 権限を含むプロジェクト レベルの IAM 役割が割り当てられている必要があります。プロジェクト レベルで bigquery.models.list 権限が付与されている場合は、プロジェクト内の任意のデータセット内のモデルを一覧表示できます。次の事前定義されたプロジェクト レベルの IAM 役割には、bigquery.models.list 権限が含まれています。

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

BigQuery ML での IAM 役割と権限の詳細については、アクセス制御をご覧ください。データセット レベルの役割の詳細については、BigQuery のドキュメントのデータセットの基本の役割をご覧ください。

モデルの一覧表示

データセット内のモデルを一覧表示する手順は、以下のとおりです。

Console

  1. Cloud Console の BigQuery ウェブ UI に移動します。

    BigQuery ウェブ UI に移動

  2. ナビゲーション パネルの [リソース] セクションで、プロジェクト名をクリックします。

  3. プロジェクト内の各データセットを展開すると、データセット内の他の BigQuery リソースとともに、モデルが一覧表示されます。モデルにはモデルアイコン モデルアイコン がついています。

CLI

--models または -m フラグを指定して bq ls コマンドを発行します。--format フラグを使用して出力を制御できます。デフォルト プロジェクト以外のプロジェクトにあるモデルを一覧表示する場合は、[PROJECT_ID]:[DATASET] の形式でプロジェクト ID をデータセットに追加します。

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

ここで

  • [PROJECT_ID] はプロジェクト ID です。
  • [DATASET] はデータセットの名前です。

--format=pretty フラグを使用すると、コマンドの出力は次のようになります。--format=pretty を指定すると、フォーマットされたテーブルが出力されます。Model Type 列に、モデルタイプ(たとえば、KMEANS)が表示されます。

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

例:

次のコマンドを入力すると、デフォルト プロジェクトにある mydataset データセット内のモデルが一覧表示されます。

bq ls --models --format=pretty mydataset

次のコマンドを入力すると、myotherproject にある mydataset データセット内のモデルが一覧表示されます。ここではモデルの一覧表示に -m ショートカットが使われています。

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

API

API を使用してモデルを一覧表示するには、models.list メソッドを呼び出し、projectIddatasetId を指定します。

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

次のステップ