データセットの作成と使用

このドキュメントでは、BigQuery でデータセットを作成して使用する方法について説明します。データセットを作成した後、以下のことができます。

  • データセットにアクセス制御を割り当てる
  • データセットに関する情報を取得する
  • データセットを一覧表示する
  • メタテーブルを使用してデータセットのメタデータを取得する

データセットのプロパティの更新、データセット名の変更、データセットの削除、データセットのコピーなどのデータセットの管理の詳細については、データセットの管理をご覧ください。

データセットの制限事項

BigQuery データセットには次の制限があります。

  • 地理的なロケーションは作成時にのみ設定できます。データセットが作成されると、そのロケーションは不変になり、BigQuery ウェブ UI、コマンドライン ツール、または patch API メソッドや update API メソッドを呼び出して変更することはできません。
  • 1 つのクエリで参照されるすべてのテーブルは、同じロケーションにあるデータセット内に保存されている必要があります。

  • テーブルをコピーする場合、コピー元とコピー先のテーブルが同じロケーションに存在する必要があります。

  • データセット名はプロジェクトごとに一意である必要があります。
  • プロジェクトで何千ものデータセットにアクセスすると、ウェブ UI のパフォーマンスが低下し、データセットのリスティングが遅くなります。

データセットの作成

データセットを作成するには、BigQuery ウェブ UI、CLI の bq mk コマンド、または API の datasets.insert メソッドを使用します。

BigQuery でデータセットを作成するとき、データセット名はプロジェクトごとに一意にする必要があります。データセット名の規則は以下のとおりです。

  • 1,024 文字以内
  • 使用できる文字は英字(大文字または小文字)、数字、アンダースコアのみ
  • 英字の大文字と小文字が区別される(mydatasetMyDataset は同じプロジェクト内に共存できます)

次のようなデータセット名は使用できません。

  • スペースまたは特殊文字(-、&、@、% など)が含まれる

必要な権限

データセットを作成するユーザーには、プロジェクト レベルの基本の役割、または bigquery.datasets.create 権限を含む事前定義された IAM 役割が割り当てられている必要があります。事前定義されたプロジェクト レベルの IAM 役割のうち、bigquery.datasets.create 権限を含むものは以下のとおりです。

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

データセットの作成

データセットを作成するには:

ウェブ UI

  1. ナビゲーション内のプロジェクト名の横にある下矢印アイコン 下矢印アイコン をクリックし、[Create new dataset] をクリックします。

  2. [Create Dataset] ダイアログで、次の操作を行います。

    • [Dataset ID] に、一意のデータセット名を入力します。
    • [Data location] で、データセットのロケーションを選択します。デフォルト値は [Unspecified] で、データセットのロケーションは US に設定されます。データセットを作成した後にロケーションを変更することはできません。

    • [Data expiration] で、以下のいずれかのオプションを選択します。

      • Never:(デフォルト)データセット内に作成されたテーブルが自動的に削除されることはありません。テーブルを削除する場合は、手動で削除する必要があります。
      • In [INTEGER] days: データセット内に作成されたテーブルは、作成時点から [INTEGER] 日後に削除されます。この値が適用されるのは、テーブルの作成時にテーブル有効期限を設定しなかった場合です。

        データセットを作成

    • [OK] をクリックします。

コマンドライン

新しいデータセットを作成するには、bq mk コマンドを使用して --location フラグを指定します。オプションのパラメータには --default_table_expiration--description があります。デフォルト プロジェクト以外のプロジェクトにデータセットを作成するには、[PROJECT_ID]:[DATASET] の形式でプロジェクト ID をデータセット名に追加します。
bq --location=[LOCATION] mk --dataset --default_table_expiration [INTEGER] --description [DESCRIPTION] [PROJECT_ID]:[DATASET]

ここで:

  • [LOCATION] は、データセットのロケーションです。データセットを作成した後にロケーションを変更することはできません。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。

  • [INTEGER] は、新しく作成されるテーブルのデフォルトの存続期間(秒数)です。最小値は 3,600 秒(1 時間)です。現在時刻にこの整数値を足した値が有効期限になります。データセット内に作成されたテーブルは、作成時点から [INTEGER] 秒後に削除されます。この値が適用されるのは、テーブルの作成時にテーブル有効期限を設定しなかった場合です。

  • [DESCRIPTION] はデータセットの説明であり、引用符で囲みます。
  • [PROJECT_ID] はプロジェクト ID です。
  • [DATASET] は、作成するデータセットの名前です。

たとえば、次のコマンドを実行すると mydataset という名前のデータセットが作成され、データのロケーションは US、デフォルトのテーブル存続期間は 3,600 秒(1 時間)、説明は「This is my dataset」に設定されます。このコマンドでは、--dataset フラグの代わりに -d ショートカットを使用しています。-d--dataset を省略した場合、このコマンドはデフォルトでデータセットを作成します。

bq --location=US mk -d --default_table_expiration 3600 --description "This is my dataset." mydataset

bq ls コマンドを使用して、データセットが作成されたことを確認できます。また、新しいデータセットを作成するときに、bq mk -t [DATASET].[TABLE] の形式を使用してテーブルを作成することもできます。テーブルの作成について詳しくは、テーブルの作成をご覧ください。

API

データセット リソースを定義して、datasets.insert メソッドを呼び出します。

C#

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

public void CreateDataset(string datasetId, BigQueryClient client)
{
    var dataset = client.GetOrCreateDataset(datasetId);
}

Go

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

meta := &bigquery.DatasetMetadata{
	Location: "US", // Create the dataset in the US.
}
if err := client.Dataset(datasetID).Create(ctx, meta); err != nil {
	return err
}

Java

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

Dataset dataset = null;
DatasetInfo datasetInfo = DatasetInfo.newBuilder(datasetName).build();
try {
  // the dataset was created
  dataset = bigquery.create(datasetInfo);
} catch (BigQueryException e) {
  // the dataset was not created
}

Node.js

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

// Imports the Google Cloud client library
const BigQuery = require('@google-cloud/bigquery');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const datasetId = "my_new_dataset";

// Creates a client
const bigquery = new BigQuery({
  projectId: projectId,
});

// Creates a new dataset
bigquery
  .createDataset(datasetId)
  .then(results => {
    const dataset = results[0];
    console.log(`Dataset ${dataset.id} created.`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

PHP

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

use Google\Cloud\BigQuery\BigQueryClient;

/**
 * @param string $projectId The Google project ID.
 * @param string $dataset   The BigQuery dataset ID.
 */
function create_dataset($projectId, $datasetId)
{
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->createDataset($datasetId);
    return $dataset;
}

Python

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

# Create a DatasetReference using a chosen dataset ID.
# The project defaults to the Client's project if not specified.
dataset_ref = client.dataset(dataset_id)

# Construct a full Dataset object to send to the API.
dataset = bigquery.Dataset(dataset_ref)
# Specify the geographic location where the dataset should reside.
dataset.location = 'US'

# Send the dataset to the API for creation.
# Raises google.api_core.exceptions.AlreadyExists if the Dataset already
# exists within the project.
dataset = client.create_dataset(dataset)  # API request

Ruby

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

# project_id = "Your Google Cloud project ID"
# dataset_id = "ID of the dataset to create"

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new project: project_id

bigquery.create_dataset dataset_id

puts "Created dataset: #{dataset_id}"

データセットへのアクセス制御の割り当て

BigQuery のテーブルやビューへのアクセス権を共有するには、プロジェクト レベルの IAM 役割とデータセット レベルのアクセス制御を使用します。現時点では、アクセス制御を直接テーブルやビューに適用することはできません。

プロジェクト レベルのアクセス制御は、特定のプロジェクト内のすべてのデータセット、テーブル、ビュー、テーブルデータへのアクセスをどのユーザー、グループ、サービス アカウントに許可するかを決定します。データセット レベルのアクセス制御は、特定のデータセット内のテーブル、ビュー、テーブルデータへのアクセスをどのユーザー、グループ、サービス アカウントに許可するかを決定します。

たとえば、プロジェクト レベルでユーザーに bigquery.dataOwner 役割を割り当てると、そのユーザーは対象のプロジェクトのすべてのデータセットでテーブルとビューを作成、更新、削除できます。データセット レベルで OWNER 役割を割り当てると、そのユーザーはそのデータセット内に限りテーブルとビューを作成、更新、削除できます。データセット レベルで基本の役割の OWNER を付与することは、そのデータセットに対する bigquery.dataOwner 役割を付与することと同じです。

ユーザーまたはグループにプロジェクト レベルでより限定的な役割を割り当てる場合、個々のデータセットに対するアクセス権も付与する必要があります。たとえば、ユーザーまたはグループにプロジェクト レベルで bigquery.user 役割を付与すると、そのユーザーはデータセットを作成することや、そのデータセット内のテーブルに対してクエリジョブを実行することができます。自分が作成したものではないデータセット内のテーブルに対してクエリを実行するには、クエリ対象のデータセットそれぞれについて、少なくともデータセット レベルの READER アクセス権が付与されている必要があります。データセット レベルで基本の役割の READER を付与することは、そのデータセットに対する bigquery.dataViewer 役割を付与することと同じです。

事前定義されたプロジェクト レベルの IAM 役割とデータセット レベルのアクセス制御の詳細については、アクセス制御をご覧ください。

必要な権限

データセットのアクセス制御を割り当てまたは更新するユーザーには、データセット レベルで OWNER アクセス権が付与されているか、bigquery.datasets.update 権限を含むプロジェクト レベルの IAM 役割が割り当てられている必要があります。事前定義されたプロジェクト レベルの IAM 役割のうち、bigquery.datasets.update 権限を含むものは以下のとおりです。

また、bigquery.user 役割には bigquery.datasets.create 権限が含まれているため、bigquery.user 役割に割り当てられたユーザーは、自分が作成した任意のデータセットを更新できます。bigquery.user 役割に割り当てられているユーザーがデータセットを作成すると、そのユーザーには、作成したデータセットへの OWNER アクセス権が付与されます。 データセットへの OWNER アクセス権が付与されたユーザーは、そのデータセットを完全に制御できます。

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

データセットへのアクセスの制御

データセットを作成した後、BigQuery ウェブ UI または CLI の bq update コマンドを使用してデータセットにアクセス制御を適用できます。UI またはコマンドライン ツールでデータセットを作成するときにアクセス制御を適用することはできません。

API では、datasets.insert メソッドを呼び出してデータセットを作成する際にアクセス制御を適用できます。データセットの作成後にアクセス制御を適用するには、datasets.patch メソッドを呼び出します。

データセットにアクセス制御を適用するとき、以下のユーザーとグループにアクセス権を付与できます。

  • User by e-mail - 個々の Google アカウントにデータセットへのアクセスが許可されます。
  • Group by e-mail - Google グループのすべてのメンバーにデータセットへのアクセスが許可されます。
  • Domain - Google ドメイン内のすべてのユーザーとグループにデータセットへのアクセスが許可されます。
  • All Authenticated Users - すべての Google アカウント所有者にデータセットへのアクセスが許可されます(データセットが公開されます)。
  • Project Owners - すべてのプロジェクト オーナーにデータセットへのアクセスが許可されます。
  • Project Viewers - すべてのプロジェクト閲覧者にデータセットへのアクセスが許可されます。
  • Project Editors - すべてのプロジェクト編集者にデータセットへのアクセスが許可されます。
  • Authorized View - データセットに対する表示アクセスだけが許可されます。

データセットにアクセス制御を割り当てるには:

ウェブ UI

  1. データセットの右側にあるプルダウン矢印をクリックし、[Share Dataset] を選択します。

  2. [Share Dataset] ダイアログの [Add People] で、フィールドの左にあるプルダウンをクリックして適切なオプションを選択します。

  3. テキスト ボックスに値を入力します。たとえば、[User by e-mail] または [Group by e-mail] を選択した場合は、ユーザーまたはグループのメールアドレスを入力します。

  4. [Add People] フィールドの右側にある [Can view] をクリックし、リストから該当する役割を選択します。

    データセットに個人を追加

    • [Can view](READER)を選択すると、データセットに対する bigquery.dataViewer アクセス権が付与されます。
    • [Can edit](WRITER)を選択すると、データセットに対する bigquery.dataEditor アクセス権が付与されます。
    • [Is owner](OWNER)を選択すると、データセットに対する bigquery.dataOwner アクセス権が付与されます。

      これらのデータセット役割の詳細については、データセットに対する基本の役割をご覧ください。

  5. [Add] をクリックして、[Save changes] をクリックします。

コマンドライン

  1. show コマンドを使用して、既存のデータセット情報(これにはアクセス制御も含まれます)を JSON ファイルに書き込みます。データセットがデフォルト プロジェクト以外のプロジェクトにある場合は、[PROJECT_ID]:[DATASET] の形式でプロジェクト ID をデータセット名に追加します。

    bq show --format=prettyjson [PROJECT_ID]:[DATASET] > [PATH_TO_FILE]
    

    ここで:

    • [PROJECT_ID] はプロジェクト ID です。
    • [DATASET] は、データセットの名前です。
    • [PATH_TO_FILE] は、ローカルマシン上の JSON ファイルへのパスです。

    例:

    次のコマンドを入力すると、mydataset のアクセス制御が JSON ファイルに書き込まれます。mydataset はデフォルト プロジェクトにあります。

    bq show --format=prettyjson mydataset > /tmp/mydataset.json
    

    次のコマンドを入力すると、mydataset のアクセス制御が JSON ファイルに書き込まれます。mydatasetmyotherproject にあります。

    bq show --format=prettyjson myotherproject:mydataset > /tmp/mydataset.json
    
  2. JSON ファイルの "access" セクションに変更を加えます。specialGroup のエントリ(projectOwnersprojectWritersprojectReadersallAuthenticatedUsers)を自由に追加または削除できます。さらに、userByEmailgroupByEmaildomain を追加、削除、変更することもできます。

    たとえば、データセットの JSON ファイルの access セクションは次のようになります。

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      }
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      }
      {
       "role": "READER",
       "domain": "[DOMAIN_NAME]"
      }
      {
       "role": "WRITER",
       "userByEmail": "[USER_EMAIL]"
      }
      {
       "role": "READER",
       "groupByEmail": "[GROUP_EMAIL]"
      }
     ],
    }
    

  3. 編集が完了したら、update コマンドを実行します。その際、--source フラグを使用して JSON ファイルを指定します。データセットがデフォルト プロジェクト以外のプロジェクトにある場合は、[PROJECT_ID]:[DATASET] の形式でプロジェクト ID をデータセット名に追加します。

    bq update --source [PATH_TO_FILE] [PROJECT_ID]:[DATASET]
    

    ここで:

    • [PATH_TO_FILE] は、ローカルマシン上の JSON ファイルへのパスです。
    • [PROJECT_ID] はプロジェクト ID です。
    • [DATASET] は、データセットの名前です。

    例:

    次のコマンドを入力すると、mydataset のアクセス制御が更新されます。mydataset はデフォルト プロジェクトにあります。

    bq update --source /tmp/mydataset.json mydataset
    

    次のコマンドを入力すると、mydataset のアクセス制御が更新されます。mydatasetmyotherproject にあります。

    bq update --source /tmp/mydataset.json myotherproject:mydataset
    
  4. アクセス制御の変更を確認するには、show コマンドをもう一度入力します。ただし、今回は情報をファイルに書き込む指定を省略します。

    bq show --format=prettyjson [DATASET]

    または

    bq show --format=prettyjson [PROJECT_ID]:[DATASET]

API

データセットの作成時にアクセス制御を適用するには、データセット リソースを定義して datasets.insert を呼び出します。アクセス制御を更新するには、access プロパティを含むデータセット リソースを指定して datasets.patch を呼び出します。

datasets.update メソッドはデータセット リソース全体を置き換えるため、アクセス制御の更新には datasets.patch メソッドの方が適切です。

詳細については、データセットをご覧ください。

Go

dataset.access_entries プロパティを使用してデータセットのアクセス制御を設定します。次に、client.update_dataset() 関数を呼び出してプロパティを更新します。

ds := client.Dataset(datasetID)
original, err := ds.Metadata(ctx)
if err != nil {
	return err
}
// Append a new access control entry to the existing access list.
changes := bigquery.DatasetMetadataToUpdate{
	Access: append(original.Access, &bigquery.AccessEntry{
		Role:       bigquery.ReaderRole,
		EntityType: bigquery.UserEmailEntity,
		Entity:     "sample.bigquery.dev@gmail.com"},
	),
}

// Leverage the ETag for the update to assert there's been no modifications to the
// dataset since the metadata was originally read.
if _, err := ds.Update(ctx, changes, original.ETag); err != nil {
	return err
}

Python

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset = client.get_dataset(client.dataset('my_dataset'))

entry = bigquery.AccessEntry(
    role='READER',
    entity_type='userByEmail',
    entity_id='sample.bigquery.dev@gmail.com')
assert entry not in dataset.access_entries
entries = list(dataset.access_entries)
entries.append(entry)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ['access_entries'])  # API request

assert entry in dataset.access_entries

データセットの使用

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

データセットの情報を取得するには、BigQuery ウェブ UI、CLI の bq show コマンド、または API の datasets.get メソッドを使用します。

必要な権限

データセットに関する情報を取得するユーザーには、データセット レベルの READER 役割が割り当てられているか、bigquery.datasets.get 権限を含むプロジェクト レベルの IAM 役割が割り当てられている必要があります。事前定義されたプロジェクト レベルの IAM 役割のうち、bigquery.jobUser 以外のものには、bigquery.datasets.get 権限が含まれています。

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

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

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

ウェブ UI

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

データセットを表示

コマンドライン

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

bq show --format=prettyjson [PROJECT_ID]:[DATASET]

ここで:

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

例:

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

bq show --format=prettyjson mydataset

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

bq show --format=prettyjson myotherproject:mydataset

API

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

Go

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

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

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

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

Java

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

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

Python

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
dataset = client.get_dataset(dataset_ref)  # API request

# View dataset properties
print('Dataset ID: '.format(dataset_id))
print('Description: '.format(dataset.description))
print('Labels:')
for label, value in dataset.labels.items():
    print('\t{}: {}'.format(label, value))
# View tables in dataset
print('Tables:')
tables = list(client.list_tables(dataset_ref))  # API request(s)
if tables:
    for table in tables:
        print('\t{}'.format(table.table_id))
else:
    print('\tThis dataset does not contain any tables.')

データセットの一覧表示

データセットを一覧表示するには、BigQuery ウェブ UI、CLI の bq ls コマンド、API の datasets.list メソッドを使用します。

必要な権限

データセットを一覧表示するときは、自分が bigquery.datasets.get 権限を持つデータセットだけが返されます。これには、自分がデータセット レベルの READER アクセス権を持っているデータセットも含まれます。事前定義されたプロジェクト レベルの IAM 役割のうち、bigquery.jobUser 以外のものには、bigquery.datasets.get 権限が含まれています。事前定義されたプロジェクト レベルの IAM 役割(bigquery.jobUser 以外)が割り当てられているユーザーは、そのプロジェクト内のすべてのデータセットを一覧表示できます。

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

プロジェクト内のデータセットの一覧表示

プロジェクト内のデータセットを一覧表示するには:

ウェブ UI

ウェブ UI のナビゲーション パネルには、プロジェクト別にデータセットが一覧表示にされます。

コマンドライン

bq ls コマンドを発行すると、データセットのリストがデータセット ID 順に返されます。--format フラグを使用して出力を制御できます。デフォルト プロジェクト以外のプロジェクト内のデータセットを一覧表示するには、--project_id フラグをコマンドに追加します。

bq ls --format=prettyjson --project_id [PROJECT_ID]

ここで:

  • [PROJECT_ID] はプロジェクトの名前です。

例:

デフォルト プロジェクト内のデータセットを一覧表示するには、次のコマンドを入力します。

bq ls --format=prettyjson

myotherproject 内のデータセットを一覧表示するには、次のコマンドを入力します。

bq ls --format=prettyjson --project_id myotherproject

API

API を使用してデータセットを一覧表示するには、API の datasets.list メソッドを呼び出します。

C#

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

public List<BigQueryDataset> ListDatasets(BigQueryClient client)
{
    var datasets = client.ListDatasets().ToList();
    return datasets;
}

Go

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

it := client.Datasets(ctx)
for {
	dataset, err := it.Next()
	if err == iterator.Done {
		break
	}
	fmt.Println(dataset.DatasetID)
}

Java

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

// List datasets in the default project
Page<Dataset> datasets = bigquery.listDatasets(DatasetListOption.pageSize(100));
for (Dataset dataset : datasets.iterateAll()) {
  // do something with the dataset
}
// List datasets in a specified project
Page<Dataset> datasets = bigquery.listDatasets(projectId, DatasetListOption.pageSize(100));
for (Dataset dataset : datasets.iterateAll()) {
  // do something with the dataset
}

Node.js

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

// Imports the Google Cloud client library
const BigQuery = require('@google-cloud/bigquery');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";

// Creates a client
const bigquery = new BigQuery({
  projectId: projectId,
});

// Lists all datasets in the specified project
bigquery
  .getDatasets()
  .then(results => {
    const datasets = results[0];
    console.log('Datasets:');
    datasets.forEach(dataset => console.log(dataset.id));
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

PHP

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

use Google\Cloud\BigQuery\BigQueryClient;

/**
 * @param string $projectId The Google project ID.
 */
function list_datasets($projectId)
{
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $datasets = $bigQuery->datasets();
    foreach ($datasets as $dataset) {
        print($dataset->id() . PHP_EOL);
    }
}

Python

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

# from google.cloud import bigquery
# client = bigquery.Client()

datasets = list(client.list_datasets())
project = client.project

if datasets:
    print('Datasets in project {}:'.format(project))
    for dataset in datasets:  # API request(s)
        print('\t{}'.format(dataset.dataset_id))
else:
    print('{} project does not contain any datasets.'.format(project))

Ruby

BigQuery クライアントのインストールと作成の詳細については、BigQuery クライアント ライブラリをご覧ください。

# project_id = "Your Google Cloud project ID"

require "google/cloud/bigquery"

bigquery = Google::Cloud::Bigquery.new project: project_id

bigquery.datasets.each do |dataset|
  puts dataset.dataset_id
end

メタテーブルを使用したデータセットのメタデータの取得

BigQuery には、メタデータ(データセット内のテーブルやビューのリストなど)が格納された特別なテーブルがあります。これらの「メタテーブル」は読み取り専用です。データセット内のテーブルやビューに関するメタデータにアクセスするには、クエリの SELECT ステートメントで __TABLES_SUMMARY__ メタテーブルを使用します。このクエリを実行するには、BigQuery ウェブ UI またはコマンドライン ツールの bq query コマンドを使用するか、API の jobs.insert メソッドを呼び出してクエリジョブを構成します。

__TABLES_SUMMARY__ メタテーブルを使用するクエリは次のようになります。

    SELECT [FIELD] FROM [DATASET].__TABLES_SUMMARY__

ここで:

  • DATASET はデータセットの名前です。
  • FIELD は以下のいずれかです。
説明
project_id プロジェクトの名前。
dataset_id データセットの名前。
table_id テーブルまたはビューの名前。
creation_time テーブルまたはビューが作成された時刻(UTC 1970 年 1 月 1 日からのミリ秒数)。
type テーブルの種類を表す整数。通常のテーブルは 1、ビューは 2。

必要な権限

__TABLES_SUMMARY__ メタテーブルを使用するクエリジョブを実行するには、bigquery.jobs.create 権限が必要です。次の定義済みのプロジェクト レベルの IAM 役割には bigquery.jobs.create 権限が含まれています。

ユーザーには、データセット レベルで READER 役割が付与されているか、bigquery.tables.getData 権限を含むプロジェクト レベルの IAM 役割が割り当てられている必要もあります。事前定義されたプロジェクト レベルの IAM 役割のうち、bigquery.userbigquery.jobUser 以外のものには、bigquery.tables.getData 権限が含まれています。

メタテーブルの制限事項

メタテーブルには以下の制限があります。

  • 一般に、__TABLES_SUMMARY__ の検索速度が実用的な速さになるのはデータセット内のテーブル数が数千以下の場合です。データセットのサイズがこれより大きくなると、__TABLES_SUMMARY__ の検索速度は徐々に遅くなり、使用可能なリソースを超過する可能性があります。
  • メタテーブルを tables.insert メソッドで使用することはできません。
  • メタテーブルを宛先テーブルとして使用することはできません。
  • メタテーブルは、レガシー SQL のテーブル デコレータをサポートしていません。
  • メタテーブルは、データセット内のテーブルのリストには表示されません。

メタテーブルの例

次のクエリは、bigquery-public-data.samples データセットのすべてのメタデータを取得します。

ウェブ UI

#standardSQL
SELECT
  *
FROM
  `bigquery-public-data.samples.__TABLES_SUMMARY__`

コマンドライン

bq --location=US query --use_legacy_sql=false '
SELECT
  *
FROM
  `bigquery-public-data.samples.__TABLES_SUMMARY__`'

出力は次のようになります。

+----------------------+------------+-----------------+---------------+------+
| project_id           | dataset_id |    table_id     | creation_time | type |
+----------------------+------------+-----------------+---------------+------+
| bigquery-public-data | samples    | github_nested   | 1348782587310 |    1 |
| bigquery-public-data | samples    | github_timeline | 1335915950690 |    1 |
| bigquery-public-data | samples    | gsod            | 1335916040125 |    1 |
| bigquery-public-data | samples    | natality        | 1335916045005 |    1 |
| bigquery-public-data | samples    | shakespeare     | 1335916045099 |    1 |
| bigquery-public-data | samples    | trigrams        | 1335916127449 |    1 |
| bigquery-public-data | samples    | wikipedia       | 1335916132870 |    1 |
+----------------------+------------+-----------------+---------------+------+

次のクエリは、bigquery-public-data.samples データセット内のすべてのテーブルとビューのリストを取得します。

ウェブ UI

#standardSQL
SELECT
  table_id
FROM
  `bigquery-public-data.samples.__TABLES_SUMMARY__`

コマンドライン

bq --location=US query --use_legacy_sql=false '
SELECT
  table_id
FROM
  `bigquery-public-data.samples.__TABLES_SUMMARY__`'

出力は次のようになります。

+-----------------+
|    table_id     |
+-----------------+
| github_nested   |
| github_timeline |
| gsod            |
| natality        |
| shakespeare     |
| trigrams        |
| wikipedia       |
+-----------------+

次のクエリは、bigquery-public-data.samples データセット内の各テーブルの種類のリストを取得します。

ウェブ UI

#standardSQL
SELECT
  table_id, type
FROM
  `bigquery-public-data.samples.__TABLES_SUMMARY__`

コマンドライン

bq --location=US query --use_legacy_sql=false '
SELECT
  table_id, type
FROM
  `bigquery-public-data.samples.__TABLES_SUMMARY__`'

出力は次のようになります。

+-----------------+------+
|    table_id     | type |
+-----------------+------+
| github_nested   |   1  |
| github_timeline |   1  |
| gsod            |   1  |
| natality        |   1  |
| shakespeare     |   1  |
| trigrams        |   1  |
| wikipedia       |   1  |
+-----------------+------+

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。