コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

データセットの管理

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

始める前に

このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。タスクの実行に必要な権限(存在する場合)は、タスクの「必要な権限」セクションに記載されています。

データセットの名前変更

現在、既存のデータセットの名前を変更することはできませんが、データセットをコピーすることはできます。データセットのコピーをご覧ください。

データセットのコピー

データセットをコピーする手順(リージョン間でのコピーを含む)については、データセットのコピーをご覧ください。

データセットの移動

データセットをあるロケーションから別のロケーションに手動で移動するには、次の手順を行います。

  1. データセットと同じロケーションか、データセットのロケーションに含まれるロケーションの Cloud Storage バケットに、BigQuery テーブルからデータをエクスポートします。たとえば、データセットが「EU」マルチリージョン ロケーションにある場合は、EU の一部である「europe-west1」ベルギーのロケーションにデータをエクスポートできます。

    BigQuery からのデータのエクスポートに対しては課金されませんが、エクスポートしたデータを Cloud Storage に保存する場合は課金の対象になります。BigQuery からのエクスポートには、エクスポート ジョブの上限が適用されます。

  2. データを、Cloud Storage のエクスポート バケットから転送先の場所に作成した新しいバケットに、コピーまたは移動します。たとえば、「US」(マルチリージョン)から「asia-northeast1」(東京リージョン)にデータを移動すると、東京で作成したバケットにデータが転送されます。Cloud Storage オブジェクトの転送について詳しくは、Cloud Storage ドキュメントのオブジェクトのコピー、名前変更、移動をご覧ください。

    リージョン間でデータを転送すると、Cloud Storage でネットワークの下り(外向き)料金が発生することに注意してください。

  3. 新しいロケーションの Cloud Storage バケットにデータを転送した後、新しい BigQuery データセットを(新しいロケーションに)作成します。次に、Cloud Storage バケットから BigQuery にデータを読み込みます。

    BigQuery へのデータの読み込みに対しては課金されませんが、Cloud Storage にデータを保存した場合は課金の対象となり、データまたはバケットを削除するまで料金が請求されます。読み込まれたデータを BigQuery に保存することについても、請求の対象になります。BigQuery へのデータの読み込みには、読み込みジョブの上限が適用されます。

また、Cloud Composer を使用して、大規模なデータセットをプログラムで移動し、コピーすることもできます。

Cloud Storage を使用した大量のデータセットの保存や移動に関する詳細は、Cloud Storage とビッグデータの使用をご覧ください。

データセットが存在するかどうかを確認する

Java

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetId;

// Sample to check dataset exist
public class DatasetExists {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    datasetExists(datasetName);
  }

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

      Dataset dataset = bigquery.getDataset(DatasetId.of(datasetName));
      if (dataset != null) {
        System.out.println("Dataset already exists.");
      } else {
        System.out.println("Dataset not found.");
      }
    } catch (BigQueryException e) {
      System.out.println("Something went wrong. \n" + e.toString());
    }
  }
}

Python

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

from google.cloud import bigquery
from google.cloud.exceptions import NotFound

client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset to determine existence.
# dataset_id = "your-project.your_dataset"

try:
    client.get_dataset(dataset_id)  # Make an API request.
    print("Dataset {} already exists".format(dataset_id))
except NotFound:
    print("Dataset {} is not found".format(dataset_id))

データセットの削除

データセットは、次の方法で削除できます。

  • Google Cloud コンソールを使用する
  • DROP SCHEMA DDL ステートメントを使用します。
  • bq コマンドライン ツールで bq rm コマンドを使用します。
  • datasets.delete API メソッドを呼び出します。
  • クライアント ライブラリの使用

必要な権限

データセットを削除するには、次の IAM 権限が必要です。

  • bigquery.datasets.delete(データセットを削除できます)
  • bigquery.tables.delete(テーブルとビューを削除できます)

次の IAM 事前定義ロールには、データセットを削除するために必要な権限が含まれています。

  • roles/bigquery.dataOwner
  • roles/bigquery.admin

また、bigquery.datasets.create 権限がある場合は、作成したデータセットとテーブルを削除できます。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

データセットの削除

Google Cloud コンソールを使用してデータセットを削除すると、データセット内のテーブルとビュー(およびそこに含まれるデータ)が削除されます。bq コマンドライン ツールを使用してデータセットを削除する場合は、-r フラグを使用してデータセットのテーブルとビューを削除する必要があります。

データセットを削除するには:

Console

  1. [エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。

  2. アクション オプションを開いて、[削除] をクリックします。

  3. [データセットの削除] ダイアログで、テキスト ボックスに「"delete"」と入力してから [削除] をクリックします。

SQL

データセットを削除するには、DROP SCHEMA ステートメントを使用します。

次の例では、mydataset という名前のデータセットを削除します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    BigQuery に移動

  2. クエリエディタで次のステートメントを入力します。

    DROP SCHEMA IF EXISTS mydataset;
    

  3. [ 実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。

bq

データセットを削除するには、bq rm コマンドを --dataset または -d ショートカット フラグ付き(省略可)で使用します。bq コマンドライン ツールを使用してデータセットを削除する場合は、コマンドを確認する必要があります。-f フラグを使用すると、確認をスキップできます。

また、データセット内にテーブルがある場合は、-r フラグを使用してデータセット内のすべてのテーブルを削除する必要があります。削除するテーブルがデフォルト プロジェクト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

bq rm -r -f -d project_id:dataset

次のように置き換えます。

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

例:

デフォルトのプロジェクトから mydataset と含まれるすべてのテーブルを削除するには、次のコマンドを入力します。このコマンドではオプションの -d ショートカットを使用しています。

bq rm -r -d mydataset

プロンプトが表示されたら、「y」と入力して Enter キーを押します。

myotherproject から mydataset と含まれるすべてのテーブルを削除するには、次のコマンドを入力します。このコマンドではオプションの -d ショートカットを使用していません。確認をスキップするために -f フラグを使用しています。

bq rm -r -f myotherproject:mydataset

API

datasets.delete メソッドを呼び出してデータセットを削除します。その際、データセット内のテーブルも削除するには、deleteContents パラメータを true に設定します。

C#

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


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteDataset
{
    public void DeleteDataset(
        string projectId = "your-project-id",
        string datasetId = "your_empty_dataset"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Delete a dataset that does not contain any tables
        client.DeleteDataset(datasetId: datasetId);
        Console.WriteLine($"Dataset {datasetId} deleted.");
    }
}

Go

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

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteDataset demonstrates the deletion of an empty dataset.
func deleteDataset(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()

	// To recursively delete a dataset and contents, use DeleteWithContents.
	if err := client.Dataset(datasetID).Delete(ctx); err != nil {
		return fmt.Errorf("Delete: %v", err)
	}
	return nil
}

Java

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

public class DeleteDataset {

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

  public static void deleteDataset(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);
      boolean success = bigquery.delete(datasetId, DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted. \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 deleteDataset() {
  // Deletes a dataset named "my_dataset".

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

  // Create a reference to the existing dataset
  const dataset = bigquery.dataset(datasetId);

  // Delete the dataset and its contents
  await dataset.delete({force: true});
  console.log(`Dataset ${dataset.id} deleted.`);
}

PHP

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

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->delete();
printf('Deleted dataset %s' . PHP_EOL, $datasetId);

Python

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


from google.cloud import bigquery

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

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

# Use the delete_contents parameter to delete a dataset and its contents.
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(
    dataset_id, delete_contents=True, not_found_ok=True
)  # Make an API request.

print("Deleted dataset '{}'.".format(dataset_id))

Ruby

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

require "google/cloud/bigquery"

def delete_dataset dataset_id = "my_empty_dataset"
  bigquery = Google::Cloud::Bigquery.new

  # Delete a dataset that does not contain any tables
  dataset = bigquery.dataset dataset_id
  dataset.delete
  puts "Dataset #{dataset_id} deleted."
end

データセットとそのコンテンツを削除するには:

C#

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


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteDatasetAndContents
{
    public void DeleteDatasetAndContents(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_with_tables"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Use the DeleteDatasetOptions to delete a dataset and its contents
        client.DeleteDataset(
            datasetId: datasetId,
            options: new DeleteDatasetOptions() { DeleteContents = true }
        );
        Console.WriteLine($"Dataset {datasetId} and contents deleted.");
    }
}

Java

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

// Sample to delete dataset with contents.
public class DeleteDatasetAndContents {

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

  public static void deleteDatasetAndContents(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);
      // Use the force parameter to delete a dataset and its contents
      boolean success = bigquery.delete(datasetId, BigQuery.DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted with contents successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted with contents. \n" + e.toString());
    }
  }
}

Ruby

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

require "google/cloud/bigquery"

def delete_dataset_and_contents dataset_id = "my_dataset_with_tables"
  bigquery = Google::Cloud::Bigquery.new

  # Use the force parameter to delete a dataset and its contents
  dataset = bigquery.dataset dataset_id
  dataset.delete force: true
  puts "Dataset #{dataset_id} and contents deleted."
end

削除したデータセットを復元する

削除したデータセットは、データセットのタイムトラベル ウィンドウ内であれば復元できます。これを行うには、時間のテーブル デコレータを使用して、削除したデータセット内の各テーブルを新しく作成したデータセットにコピーします。ビュー、実体化されたビュー、ルーティンなど、データセットに関連付けられている他のオブジェクトは手動で再作成する必要があります。

必要なロール

削除されたデータセットを復元するには、roles/bigquery.admin ロールのメンバーである必要があります。

削除したデータセットを復元する

削除したデータセットを復元するには:

  1. 新しいデータセットを作成する

    bq mk tmp_dataset
    
  2. エポックからのミリ秒の形式を使用して、元のデータセットが削除される前のタイムスタンプを選択します。例: 1418864998000

  3. (省略可)INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE ビューに対してクエリを実行し、TABLE_SCHEMATABLE_NAMEDELETED 列の情報を使用して、復元するテーブルを特定します。例:

    SELECT
      TABLE_NAME
    FROM
      `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE
    WHERE
      TABLE_SCHEMA = "ORIGINAL_DATASET_NAME"
    AND
      DELETED = true;
    
  4. 1418864998000 の時点の original_dataset.table1 テーブルを新しい tmp_dataset データセットにコピーします。

    bq cp original_dataset.table1@1418864998000 tmp_dataset.table1
    
  5. 削除したデータセット内の各テーブルに対してステップ 4 を繰り返します。

データセットのセキュリティ

BigQuery でデータセットへのアクセスを制御するには、データセットへのアクセスの制御をご覧ください。データ暗号化の詳細については、保存データの暗号化をご覧ください。

次のステップ