データセットに関する情報の取得

このドキュメントでは、BigQuery でデータセットの情報やメタデータを取得する方法について説明します。

データセット情報は次の方法で取得できます。

  • Cloud Console または従来の BigQuery ウェブ UI を使用する
  • bq show CLI コマンドを使用する
  • datasets.get API メソッドを呼び出す
  • INFORMATION_SCHEMA ビューのクエリを実行する(ベータ版
  • クライアント ライブラリを使用する

必要な権限

データセットに関する情報またはメタデータを取得するには、少なくとも bigquery.datasets.get 権限が付与されている必要があります。bigquery.datasets.get 権限は、事前定義された以下の Cloud IAM の役割に含まれています。

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

BigQuery での Cloud IAM 役割と権限については、アクセス制御をご覧ください。

データセットの情報の取得

プロジェクト内のデータセットに関する情報を取得するには:

Console

[リソース] パネルでデータセット名をクリックします。[クエリエディタ] の下に、データセットの説明と詳細が表示されます。データセットのテーブルは、[リソース] パネル内のデータセット名の下にネストされています。

データセットを表示

デフォルトでは、匿名データセットは BigQuery ウェブ UI に表示されません。匿名データセットの情報を表示するには、CLI または API を使用します。

従来の UI

データセット名をクリックします。[Dataset Details] ページに、データセットの説明、詳細、テーブルが表示されます。

データセットを表示

デフォルトでは、匿名データセットは BigQuery ウェブ UI に表示されません。匿名データセットの情報を表示するには、CLI または API を使用します。

CLI

bq show コマンドを発行します。--format フラグを使用して出力を制御できます。デフォルト以外のプロジェクトにあるデータセットの情報を取得する場合は、project_id:dataset の形式でプロジェクト ID をデータセットに追加します。

匿名データセットの情報を表示するには、bq ls --all コマンドを使用してすべてのデータセットをリストし、bq show コマンド内で匿名データセットの名前を使用します。

    bq show --format=prettyjson project_id:dataset
    

ここで

  • project_id は、プロジェクトの名前です。
  • dataset は、データセットの名前です。

例:

次のコマンドを入力して、デフォルト プロジェクトにある mydataset に関する情報を表示します。

bq show --format=prettyjson mydataset
    

次のコマンドを入力して、myotherproject にある mydataset に関する情報を表示します。

bq show --format=prettyjson myotherproject:mydataset
    

次のコマンドを入力して、デフォルト プロジェクトにある匿名データセット _1234abcd56efgh78ijkl1234 に関する情報を表示します。

bq show --format=prettyjson _1234abcd56efgh78ijkl1234
    

API

datasets.get API メソッドを呼び出し、関連パラメータを指定します。

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

import (
    	"context"
    	"fmt"
    	"io"

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

    // printDatasetInfo demonstrates fetching dataset metadata and printing some of it to an io.Writer.
    func printDatasetInfo(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()

    	meta, err := client.Dataset(datasetID).Metadata(ctx)
    	if err != nil {
    		return err
    	}

    	fmt.Fprintf(w, "Dataset ID: %s\n", datasetID)
    	fmt.Fprintf(w, "Description: %s\n", meta.Description)
    	fmt.Fprintln(w, "Labels:")
    	for k, v := range meta.Labels {
    		fmt.Fprintf(w, "\t%s: %s", k, v)
    	}
    	fmt.Fprintln(w, "Tables:")
    	it := client.Dataset(datasetID).Tables(ctx)

    	cnt := 0
    	for {
    		t, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		cnt++
    		fmt.Fprintf(w, "\t%s\n", t.TableID)
    	}
    	if cnt == 0 {
    		fmt.Fprintln(w, "\tThis dataset does not contain any tables.")
    	}
    	return nil
    }
    

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

import com.google.api.gax.paging.Page;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQuery.TableListOption;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import com.google.cloud.bigquery.Table;

    public class GetDatasetInfo {

      public static void runGetDatasetInfo() {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        getDatasetInfo(projectId, datasetName);
      }

      public static void getDatasetInfo(String projectId, 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();
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);

          // View dataset properties
          String description = dataset.getDescription();
          System.out.println(description);

          // View tables in the dataset
          // For more information on listing tables see:
          // https://javadoc.io/static/com.google.cloud/google-cloud-bigquery/0.22.0-beta/com/google/cloud/bigquery/BigQuery.html
          Page<Table> tables = bigquery.listTables(datasetName, TableListOption.pageSize(100));

          tables.iterateAll().forEach(table -> System.out.print(table.getTableId().getTable() + "\n"));

          System.out.println("Dataset info retrieved successfully.");
        } catch (BigQueryException e) {
          System.out.println("Dataset info not retrieved. \n" + e.toString());
        }
      }
    }

Node.js

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

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

    async function getDataset() {
      // Retrieves dataset named "my_dataset".

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

      // Retrieve dataset reference
      const [dataset] = await bigquery.dataset(datasetId).get();

      console.log('Dataset:');
      console.log(dataset.metadata.datasetReference);
    }
    getDataset();

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。


    from google.cloud import bigquery

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

    # TODO(developer): Set dataset_id to the ID of the dataset to fetch.
    # dataset_id = 'your-project.your_dataset'

    dataset = client.get_dataset(dataset_id)  # Make an API request.

    full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
    friendly_name = dataset.friendly_name
    print(
        "Got dataset '{}' with friendly_name '{}'.".format(
            full_dataset_id, friendly_name
        )
    )

    # View dataset properties.
    print("Description: {}".format(dataset.description))
    print("Labels:")
    labels = dataset.labels
    if labels:
        for label, value in labels.items():
            print("\t{}: {}".format(label, value))
    else:
        print("\tDataset has no labels defined.")

    # View tables in dataset.
    print("Tables:")
    tables = list(client.list_tables(dataset))  # Make an API request(s).
    if tables:
        for table in tables:
            print("\t{}".format(table.table_id))
    else:
        print("\tThis dataset does not contain any tables.")

INFORMATION_SCHEMAベータ版

INFORMATION_SCHEMA は、データセット、ルーティン、テーブル、ビュー、ジョブに関するメタデータへのアクセスを提供する一連のビューです。

SCHEMATA ビュー

INFORMATION_SCHEMA.SCHEMATA ビューにクエリを実施すると、現在のユーザーがアクセスできるプロジェクトの各データセットが 1 行で返されます。

INFORMATION_SCHEMA.SCHEMATA ビューのスキーマは次のとおりです。

列名 データ型
CATALOG_NAME STRING データセットを含むプロジェクトの名前
SCHEMA_NAME STRING データセットの名前(datasetId ともいいます)
SCHEMA_OWNER STRING 値は常に NULL
CREATION_TIME TIMESTAMP データセットの作成日時
LAST_MODIFIED_TIME TIMESTAMP データセットの最終更新日時
LOCATION STRING データセットの地理的なロケーション

次の例では将来の使用のために予約されている schema_owner を除き、すべての列を INFORMATION_SCHEMA.SCHEMATA ビューから取得します。デフォルト プロジェクト myproject 内のすべてのデータセットのメタデータが返されます。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、`project_id`.INFORMATION_SCHEMA.view という形式でそのプロジェクト ID をデータセットに追加します。例: `myproject`.INFORMATION_SCHEMA.SCHEMATA

クエリを実行するには:

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。

    Cloud Console に移動

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA には標準 SQL 構文を使用する必要があります。標準 SQL は Cloud Console のデフォルトの構文です。

        SELECT
         * EXCEPT(schema_owner)
        FROM
         INFORMATION_SCHEMA.SCHEMATA
        
  3. [実行] をクリックします。

コマンドライン

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文を使用する必要があります。

クエリを実行するには、次のように入力します。

    bq query --nouse_legacy_sql \
    'SELECT
       * EXCEPT(schema_owner)
     FROM
       INFORMATION_SCHEMA.SCHEMATA'
    

結果は次のようになります。

      +----------------+---------------+---------------------+---------------------+-----------------+
      |  catalog_name  |  schema_name  |    creation_time    | last_modified_time  |    location     |
      +----------------+---------------+---------------------+---------------------+-----------------+
      | myproject      | mydataset1    | 2018-11-07 19:50:24 | 2018-11-07 19:50:24 | US              |
      | myproject      | mydataset2    | 2018-07-16 04:24:22 | 2018-07-16 04:24:22 | US              |
      | myproject      | mydataset3    | 2018-02-07 21:08:45 | 2018-05-01 23:32:53 | asia-northeast1 |
      +----------------+---------------+---------------------+---------------------+-----------------+
      

SCHEMATA_OPTIONS ビュー

INFORMATION_SCHEMA.SCHEMATA_OPTIONS ビューにクエリを実施すると、現在のユーザーがアクセスできるプロジェクトの各データセットが 1 行で返されます。

INFORMATION_SCHEMA.SCHEMATA_OPTIONS ビューのスキーマは次のとおりです。

列名 データ型
CATALOG_NAME STRING データセットを含むプロジェクトの名前
SCHEMA_NAME STRING データセットの名前(datasetId ともいいます)
OPTION_NAME STRING オプション テーブル内の名前の値の一つ
OPTION_TYPE STRING オプション テーブルのデータ型の値の一つ
OPTION_VALUE STRING オプション テーブルの値のオプションの一つ

オプション テーブル
OPTION_NAME OPTION_TYPE OPTION_VALUE
default_table_expiration_days FLOAT64 データセット内のすべてのテーブルのデフォルトの有効期間(日数)
friendly_name STRING わかりやすいデータセット名
description STRING データセットの説明
labels ARRAY<STRUCT<STRING, STRING>> データセットのラベルを表す STRUCT の配列

例 1:

次の例では、INFORMATION_SCHEMATA.SCHEMATA_OPTIONS ビューにクエリを実施して、デフォルト プロジェクト(myproject)内のすべてのデータセットのデフォルトのテーブル有効期限を取得します。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、`project_id`.INFORMATION_SCHEMA.view という形式でそのプロジェクト ID をデータセットに追加します。例: `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS

クエリを実行するには:

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。

    Cloud Console に移動

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA には標準 SQL 構文を使用する必要があります。標準 SQL は Cloud Console のデフォルトの構文です。

        SELECT
         *
        FROM
         INFORMATION_SCHEMA.SCHEMATA_OPTIONS
        WHERE
         option_name="default_table_expiration_days"
        
  3. [実行] をクリックします。

コマンドライン

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文を使用する必要があります。

クエリを実行するには、次のように入力します。

    bq query --nouse_legacy_sql \
    'SELECT
       *
     FROM
       INFORMATION_SCHEMA.SCHEMATA_OPTIONS
     WHERE
       option_name="default_table_expiration_days"'
    

結果は次のようになります。

      +----------------+---------------+-------------------------------+-------------+---------------------+
      |  catalog_name  |  schema_name  |          option_name          | option_type |    option_value     |
      +----------------+---------------+-------------------------------+-------------+---------------------+
      | myproject      | mydataset3    | default_table_expiration_days | FLOAT64     | 0.08333333333333333 |
      | myproject      | mydataset2    | default_table_expiration_days | FLOAT64     | 90.0                |
      | myproject      | mydataset1    | default_table_expiration_days | FLOAT64     | 30.0                |
      +----------------+---------------+-------------------------------+-------------+---------------------+
      

例 2:

次の例では、INFORMATION_SCHEMATA.SCHEMATA_OPTIONS ビューにクエリを実施して、デフォルト プロジェクト(myproject)のすべてのデータセットのラベルを取得します。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、`project_id`.INFORMATION_SCHEMA.view という形式でそのプロジェクト ID をデータセットに追加します。例: `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS

クエリを実行するには:

Console

  1. Cloud Console で BigQuery ウェブ UI を開きます。

    Cloud Console に移動

  2. [クエリエディタ] ボックスに、次の標準 SQL クエリを入力します。INFORMATION_SCHEMA には標準 SQL 構文を使用する必要があります。標準 SQL は Cloud Console のデフォルトの構文です。

        SELECT
         *
        FROM
         INFORMATION_SCHEMA.SCHEMATA_OPTIONS
        WHERE
         option_name="labels"
        
  3. [実行] をクリックします。

コマンドライン

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文を使用する必要があります。

クエリを実行するには、次のように入力します。

    bq query --nouse_legacy_sql \
    'SELECT
       *
     FROM
       INFORMATION_SCHEMA.SCHEMATA_OPTIONS
     WHERE
       option_name="labels"'
    

結果は次のようになります。

      +----------------+---------------+-------------+---------------------------------+------------------------+
      |  catalog_name  |  schema_name  | option_name |          option_type            |      option_value      |
      +----------------+---------------+-------------+---------------------------------+------------------------+
      | myproject      | mydataset1    | labels      | ARRAY<STRUCT<STRING, STRING>>   | [STRUCT("org", "dev")] |
      | myproject      | mydataset2    | labels      | ARRAY<STRUCT<STRING, STRING>>   | [STRUCT("org", "dev")] |
      +----------------+---------------+-------------+---------------------------------+------------------------+
      

次のステップ