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

このドキュメントでは、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)
	}

	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 のリファレンス ドキュメントをご覧ください。

DatasetId datasetId = DatasetId.of(projectId, datasetName);
Dataset dataset = bigquery.getDataset(datasetId);

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 のリファレンス ドキュメントをご覧ください。

# TODO(developer): Import the client library.
# from google.cloud import bigquery

# TODO(developer): 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 オプション テーブル内の名前の値の 1 つ
OPTION_TYPE STRING オプション テーブル内のデータ型の値の 1 つ
OPTION_VALUE STRING オプション テーブル内の値のオプションの 1 つ

オプション テーブル
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")] |
  +----------------+---------------+-------------+---------------------------------+------------------------+
  

次のステップ