データセットを管理する

このドキュメントでは、データセットのコピー、別のロケーションでのデータセットの再作成、データセットの保護、データセットの削除、削除されたデータセットからのテーブルの復元、BigQuery でのデータセットの削除の取り消しを行う方法について説明します。

BigQuery 管理者は、アナリストが使用するテーブルビューへのアクセスを整理して制御できます。データセットの詳細については、データセットの概要をご覧ください。

既存のデータセットの名前の変更や、データセットの作成後にデータセットを移動することはできません。データセット名を変更する代替手段として、データセットをコピーして、宛先データセットの名前を変更します。データセットを再配置するには、次のいずれかの方法を使用します。

必要なロール

このセクションでは、データセットの管理に必要なロールと権限について説明します。コピー元またはコピー先のデータセットが、コピーに使用するプロジェクトと同じプロジェクトにある場合、そのデータセットに対する追加の権限またはロールは必要ありません。

データセットの管理に必要な権限を取得するには、次に挙げる IAM ロールを付与するよう、管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、データセットを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

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

  • データセットをコピーする:
    • コピー先プロジェクトに対する bigquery.transfers.update
    • コピー先プロジェクトに対する bigquery.jobs.create
    • コピー元とコピー先のデータセットに対する bigquery.datasets.get
    • コピー元とコピー先のデータセットに対する bigquery.tables.list
    • コピー先データセットに対する bigquery.datasets.update
    • コピー先データセットに対する bigquery.tables.create
  • データセットを削除する:
    • プロジェクトに対する bigquery.datasets.delete
    • プロジェクトに対する bigquery.tables.delete
  • 削除したデータセットを復元する:
    • プロジェクトに対する bigquery.datasets.create
    • データセットに対する bigquery.datasets.get

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

BigQuery における IAM ロールと権限の詳細については、IAM の概要をご覧ください。

データセットのコピー

データの抽出、移動、BigQuery への再読み込みなしに、リージョン内またはリージョン間でのパーティション分割データを含むデータセットをコピーできます。BigQuery は、バックエンドで BigQuery Data Transfer Service を使用してデータセットをコピーします。データを転送する際のロケーションに関する考慮事項については、データのロケーションと転送をご覧ください。

データセット コピー構成ごとに、一度にアクティブにできる転送実行は 1 つだけです。追加の転送実行はキューに入れられます。Google Cloud コンソールを使用している場合は、繰り返しのコピーをスケジューリングし、BigQuery Data Transfer Service でメールまたは Pub/Sub 通知を構成できます。

制限事項

データセットをコピーする場合は、次の制限事項が適用されます。

  • ソース データセットから次のリソースはコピーできません。

    • ビュー。
    • ルーティン(UDF など)。
    • 外部テーブル。
    • コピージョブがリージョン間で存在する場合、変更データ キャプチャ(CDC)テーブル。同じリージョン内での CDC テーブルのコピーがサポートされています。
    • 宛先データセットが CMEK で暗号化されておらず、CMEK が指定されていない場合、顧客管理の暗号鍵(CMEK)で暗号化されたテーブルでは、リージョンをまたぐテーブルのコピージョブはサポートされません。デフォルトの暗号化を使用したテーブルは、リージョンをまたいでコピーできます。

      CMEK で暗号化されたテーブルを含む、同じリージョン内のすべての暗号化されたテーブルをコピーできます。

  • 次のリソースをコピージョブのコピー先データセットとして使用することはできません。

    • 書き込みに最適化されたストレージ。
    • データセットが CMEK で暗号化されている場合(コピー・ジョブがリージョン間で行われ、ソース・テーブルが CMEK で暗号化されていない場合)。

      ただし、CMEK で暗号化されたテーブルは、同じリージョン内でコピーする場合、コピー先テーブルとして使用できます。

  • コピージョブ間の最小頻度は 12 時間です。

  • コピー先データセット内のパーティション分割テーブルへのデータの追加はサポートされていません。

  • コピー元データセットとコピー先データセットにテーブルが存在し、コピー元テーブルが最後にコピーが成功してから変更されていない場合、それはスキップされます。[コピー先テーブルを上書きする] チェックボックスが選択されていたとしても、コピー元テーブルはスキップされます。

  • コピー先データセット内のテーブルを切り捨てる場合、データセット コピージョブはコピージョブを開始する前に、コピー先データセット内のリソースに加えられた変更を検出しません。データセットのコピージョブは、コピー先データセットのすべてのデータ(テーブルとスキーマの両方を含む)を上書きします。

  • コピー先テーブルには、コピージョブの開始後にコピー元テーブルに加えられた変更が反映されない場合があります。

  • BigQuery Omni リージョンでは、データセットのコピーはサポートされていません。

  • データセットを別の VPC Service Controls サービス境界のプロジェクトにコピーするには、次の下り(外向き)ルールを設定する必要があります。

    • 宛先プロジェクトの VPC Service Controls サービス境界構成で、IAM プリンシパルに次のメソッドが必要です。

      • bigquery.datasets.get
      • bigquery.tables.list
      • bigquery.tables.get
      • bigquery.tables.getData
    • ソース プロジェクトの VPC Service Controls サービス境界構成で、使用する IAM プリンシパルのメソッドを All Methods に設定する必要があります。

データセットをコピーする

次のオプションのいずれかを選択します。

コンソール

  1. コピー先データセットに対して BigQuery Data Transfer Service を有効にします。

    BigQuery Data Transfer Service API を有効にする

  2. 必要なロールがあることを確認します。

    Pub/Sub の転送実行通知を設定する場合は(これらの手順の後述のオプション 2)、pubsub.topics.setIamPolicy 権限が必要です。

    メール通知のみを設定する場合は、Pub/Sub 権限は必要ありません。詳細については、BigQuery Data Transfer Service の実行通知をご覧ください。

  3. コピー元データセットと同じリージョンまたは別のリージョンに BigQuery データセットを作成します。

オプション 1: BigQuery のコピー関数を使用する

1 回限りの転送を作成するには、BigQuery のコピー関数を使用します。

  1. BigQuery ページに移動します。

    [BigQuery] に移動

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

  3. [データセット情報] セクションで、 [コピー] をクリックしてから、次のようにします。

    1. [データセット] フィールドで、新しいデータセットを作成するか、リストから既存のデータセット ID を選択します。

      プロジェクト内のデータセット名は一意である必要があります。プロジェクトとデータセットは異なるリージョンに存在していてもかまいませんが、リージョンを越えたコピーができるのは一部のリージョンのみに限られます。

      [ロケーション] フィールドに、コピー元データセットのロケーションが表示されます。

    2. 省略可: コピー先テーブルのデータとスキーマの両方をコピー元テーブルで上書きするには、[コピー先テーブルを上書きする] チェックボックスをオンにします。コピー元とコピー先の両方のテーブルは、同じパーティショニング スキーマを持つ必要があります。

    3. データセットをコピーするには、[コピー] をクリックします。

オプション 2: BigQuery Data Transfer Service を使用する

定期的なコピーをスケジュールし、メールまたは Pub/Sub 通知を構成するには、コピー先プロジェクトの Google Cloud コンソールで BigQuery Data Transfer Service を使用します。

  1. [データ転送] ページに移動します。

    [データ転送] に移動

  2. [転送を作成] をクリックします。

  3. [コピー元] リストで、[データセット コピー] を選択します。

  4. [表示名] フィールドに、転送実行の名前を入力します。

  5. [スケジュール オプション] セクションで、次の操作を行います。

    1. [繰り返しの頻度] で、転送を実行する頻度のオプションを選択します。

      [カスタム] を選択した場合は、カスタム頻度(たとえば、every day 00:00)を入力します。詳細については、スケジュールのフォーマットをご覧ください。

    2. [開始日と実行時間] に、転送を開始する日付と時刻を入力します。[すぐに開始可能] を選択した場合、このオプションは無効になります。

  6. [転送先の設定] セクションで、転送データを保存するコピー先データセットを選択します。[新しいデータセットの作成] をクリックして、この転送用に選択する前に新しいデータセットを作成することもできます。

  7. [データソースの詳細] に、次の情報を入力します。

    1. [コピー元データセット] に、コピーするデータセット ID を入力します。
    2. [コピー元プロジェクト] に、コピー元データセットのプロジェクト ID を入力します。
  8. コピー先テーブルのデータとスキーマの両方をコピー元テーブルで上書きするには、[コピー先テーブルを上書きする] チェックボックスをオンにします。コピー元とコピー先の両方のテーブルは、同じパーティショニング スキーマを持つ必要があります。

  9. [サービス アカウント] メニューで、Google Cloud プロジェクトに関連付けられたサービス アカウントからサービス アカウントを選択します。ユーザー認証情報を使用する代わりに、サービス アカウントを転送に関連付けることができます。データ転送でサービス アカウントを使用する方法の詳細については、サービス アカウントの使用をご覧ください。

    • フェデレーション ID でログインした場合、転送を作成するにはサービス アカウントが必要です。Google アカウントでログインした場合、転送用のサービス アカウントは省略可能です。
    • サービス アカウントには必要なロールが付与されている必要があります。
  10. 省略可: [通知オプション] セクションで、次のようにします。

    • メール通知を有効にするには、切り替えボタンをクリックします。このオプションを有効にすると、転送の実行が失敗した場合、転送構成のオーナーがメール通知を受信します。
    • Pub/Sub 通知を有効にするには、切り替えボタンをクリックしてから、リストからトピック名を選択するか、トピックを作成するをクリックするかします。このオプションで、Pub/Sub の転送実行通知を構成します。
  11. [保存] をクリックします。

bq

  1. コピー先データセットに対して BigQuery Data Transfer Service を有効にします。

  2. 必要なロールがあることを確認します。

  3. BigQuery データセットを作成するには、データセット作成フラグ --datasetlocation フラグとともに bq mk コマンドを使用します。

    bq mk \
      --dataset \
      --location=LOCATION \
      PROJECT:DATASET

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

    • LOCATION: データセットをコピーするロケーション
    • PROJECT: ターゲット データセットのプロジェクト ID
    • DATASET: ターゲット データセットの名前
  4. データセットをコピーするには、転送作成フラグ --transfer_config--data_source フラグとともに bq mk コマンドを使用します。--data_source フラグを cross_region_copy に設定する必要があります。--data_source フラグの有効な値の一覧については、bq コマンドライン ツール リファレンスの transfer-config フラグをご覧ください。

    bq mk \
      --transfer_config \
      --project_id=PROJECT \
      --data_source=cross_region_copy \
      --target_dataset=DATASET \
      --display_name=NAME \
     --service_account_name=SERCICE_ACCOUNT \
      --params='PARAMETERS'

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

    • NAME: コピージョブまたは転送構成の表示名

    • SERVICE_ACCOUNT: 転送の認証に使用されるサービス アカウント名。サービス アカウントは、転送の作成に使用した project_id が所有している必要があります。また、必要な権限がすべて付与されている必要があります。

    • PARAMETERS: 転送構成のパラメータ(JSON 形式)

      データセット コピー構成のパラメータは次のものを含みます。

      • source_dataset_id: コピーするコピー元データセットの ID
      • source_project_id: コピー元データセットがあるプロジェクトの ID
      • overwrite_destination_table: 前のコピーのテーブルを切り捨て、すべてのデータを更新できるオプションのフラグ

      コピー元とコピー先の両方のテーブルは、同じパーティショニング スキーマを持つ必要があります。

    次の例は、システムの環境に基づいたパラメータの形式を示しています。

    • Linux: 単一引用符を使用して JSON 文字列を囲みます。次に例を示します。

      '{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
      
    • Windows コマンドライン: 二重引用符を使用して JSON 文字列を囲み、文字列内の二重引用符をバックスラッシュでエスケープします。次に例を示します。

      "{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
      
    • PowerShell: 単一引用符を使用して JSON 文字列を囲み、文字列内の二重引用符をバックスラッシュでエスケープします。次に例を示します。

      '{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}'
      

    たとえば、次のコマンドは、mydataset というターゲット データセットと ID が myproject のプロジェクトを使用して My Transfer という名前のデータセット コピー構成を作成します。

    bq mk \
      --transfer_config \
      --project_id=myproject \
      --data_source=cross_region_copy \
      --target_dataset=mydataset \
      --display_name='My Transfer' \
      --params='{
          "source_dataset_id":"123_demo_eu",
          "source_project_id":"mysourceproject",
          "overwrite_destination_table":"true"
          }'

API

  1. コピー先データセットに対して BigQuery Data Transfer Service を有効にします。

  2. 必要なロールがあることを確認します。

  3. BigQuery データセットを作成するには、定義済みのデータセット リソースを指定して datasets.insert メソッドを呼び出します。

  4. データセットをコピーするには、projects.locations.transferConfigs.create メソッドを使用し、TransferConfig リソースのインスタンスを提供します。

Java

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

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to copy dataset from another gcp project
public class CopyDataset {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String destinationProjectId = "MY_DESTINATION_PROJECT_ID";
    final String destinationDatasetId = "MY_DESTINATION_DATASET_ID";
    final String sourceProjectId = "MY_SOURCE_PROJECT_ID";
    final String sourceDatasetId = "MY_SOURCE_DATASET_ID";
    Map<String, Value> params = new HashMap<>();
    params.put("source_project_id", Value.newBuilder().setStringValue(sourceProjectId).build());
    params.put("source_dataset_id", Value.newBuilder().setStringValue(sourceDatasetId).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(destinationDatasetId)
            .setDisplayName("Your Dataset Copy Name")
            .setDataSourceId("cross_region_copy")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    copyDataset(destinationProjectId, transferConfig);
  }

  public static void copyDataset(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println("Copy dataset created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Copy dataset was not created." + ex.toString());
    }
  }
}

Python

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

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

destination_project_id = "my-destination-project"
destination_dataset_id = "my_destination_dataset"
source_project_id = "my-source-project"
source_dataset_id = "my_source_dataset"
transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=destination_dataset_id,
    display_name="Your Dataset Copy Name",
    data_source_id="cross_region_copy",
    params={
        "source_project_id": source_project_id,
        "source_dataset_id": source_dataset_id,
    },
    schedule="every 24 hours",
)
transfer_config = transfer_client.create_transfer_config(
    parent=transfer_client.common_project_path(destination_project_id),
    transfer_config=transfer_config,
)
print(f"Created transfer config: {transfer_config.name}")

余分なストレージ コストがかからないようにするため、以前のデータセットを削除することを検討してください。

データセット コピージョブを表示する

Google Cloud コンソールで、データセットのコピージョブのステータスを確認し、詳細を表示するには、次のようにします。

  1. Google Cloud コンソールで、[データ転送] ページに移動します。

    [データ転送] に移動

  2. 転送の詳細を表示する転送を選択し、次のようにします。

    1. [転送の詳細] ページで、転送実行を選択します。

    2. 更新するには、[ 更新] をクリックします。

別のロケーションにデータセットを再作成する

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

  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. 新しいロケーションに新しい BigQuery データセットを作成し、Cloud Storage バケットから新しいデータセットにデータを読み込みます。

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

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

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

データセットを保護する

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

データセットの削除

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

データセットを削除するには、次のいずれかの方法を選択します。

コンソール

  1. [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。

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

  4. [データセットを削除する] ダイアログで、フィールドに「delete」と入力してから、[削除] をクリックします。

SQL

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

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

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

    [BigQuery] に移動

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

    DROP SCHEMA IF EXISTS mydataset;

    デフォルトでは、これは空のデータセットを削除する場合にのみ機能します。データセットとそのすべてのコンテンツを削除するには、CASCADE キーワードを使用します。

    DROP SCHEMA IF EXISTS mydataset CASCADE;

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

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

bq

--dataset または -d フラグを指定して(省略可能)、bq rm コマンドを使用します。データセットにテーブルが含まれている場合は、-r フラグを使用してデータセット内のすべてのテーブルを削除する必要があります。-r フラグを使用する場合は、--dataset フラグまたは -d フラグを省略できます。

コマンドを実行すると、システムから確認を求められます。-f フラグを使用すると、確認をスキップできます。

削除するテーブルがデフォルト プロジェクト以外のプロジェクトにある場合は、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

bq ls コマンドを使用して、データセットが削除されたことを確認できます。

API

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

C#

次のコードサンプルでは、空のデータセットを削除します。

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

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。

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.");
    }
}

次のコードサンプルでは、データセットとそのすべてのコンテンツを削除します。

// Copyright(c) 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
//

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.");
    }
}

Go

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

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
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 のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
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());
    }
  }
}

次のコードサンプルでは、データセットとそのすべてのコンテンツを削除します。

/*
 * Copyright 2020 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.bigquery;

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());
    }
  }
}

Node.js

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

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
// 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 のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
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 のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。

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

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

pip install google-cloud-bigquery-datatransfer を使用して BigQuery Data Transfer API 用の Python クライアントをインストールします。次に、データセットをコピーするための転送構成を作成します。
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

次のコードサンプルでは、データセットとそのすべてのコンテンツを削除します。

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
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

削除されたデータセットからテーブルを復元する

データセットの時間移動枠内であれば、削除されたデータセットからテーブルを復元できます。データセット全体を復元するには、データセットの削除を取り消すをご覧ください。

  1. 元のデータセットと同じ場所に、同じ名前でデータセットを作成します。
  2. エポックからのミリ秒の形式(たとえば、1418864998000)を使用して、元のデータセットが削除される前のタイムスタンプを選択します。
  3. 1418864998000 の時点の originaldataset.table1 テーブルを新しいデータセットにコピーします。

    bq cp originaldataset.table1@1418864998000 mydataset.mytable
    

    削除されたデータセットにあった空でないテーブルの名前を確認するには、タイムトラベル期間内でデータセットの INFORMATION_SCHEMA.TABLE_STORAGE ビューをクエリします。

データセットの削除を取り消す

データセットの削除を取り消して、削除前の状態に復元できます。削除を取り消すことができるのは、タイムトラベル期間内のデータセットのみです。このリカバリには、データセットに含まれていたすべてのオブジェクト、データセットのプロパティ、セキュリティ設定が含まれます。復元されないリソースについては、削除取り消しデータセットの制限をご覧ください。

データセットの削除取り消しに関する制限事項

  • 復元されたデータセットが参照しているセキュリティ プリンシパルが存在していない可能性があります。
  • リンクされたデータセットで削除したデータセットへの参照は、削除を取り消しても復元されません。サブスクライバーは、リンクを手動で復元するために再度サブスクライブする必要があります。
  • 削除したビジネスタグは復元されません。
  • マテリアライズド ビューを手動で更新し、承認済みビュー承認済みデータセット承認されたルーティンを再承認する必要があります。承認済みリソース(ビュー、データセット、ルーティン)を削除すると、承認の削除に最大 24 時間かかります。承認済みリソースを含むデータセットを削除してから 24 時間以内に復元する場合、再承認が不要になる可能性があります。リソースの削除を取り消した後は、必ず承認を確認するようにしてください。

データセットの削除を取り消す

データセットの削除を取り消すには、次のいずれかの方法を選択します。

SQL

UNDROP SCHEMA データ定義言語(DDL)ステートメントを使用します。

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

    [BigQuery] に移動

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

    UNDROP SCHEMA DATASET_ID;

    DATASET_ID は、削除を取り消すデータセットに置き換えます。

  3. 削除を取り消すデータセットのロケーションを指定します

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

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

API

datasets.undelete メソッドを呼び出します。

データセットの削除を取り消すと、次のエラーが発生することがあります。

  • ALREADY_EXISTS: 削除を解除しようとしたリージョンに、同じ名前のデータセットがすでに存在します。削除取り消し機能を使用して、データセットの上書きや統合はできません。
  • NOT_FOUND: 復元しようとしているデータセットがタイムトラベル期間を過ぎているか、存在しなかったか、データセットの正しい場所を指定していません。
  • ACCESS_DENIED: このデータセットの削除を取り消すために必要な権限がありません。

割り当て

コピーの割り当ての詳細については、コピージョブをご覧ください。コピージョブの使用状況は INFORMATION_SCHEMA で確認できます。INFORMATION_SCHEMA.JOBS ビューにクエリを実行する方法については、コピージョブの使用状況を取得するをご覧ください。

料金

データセットのコピーの料金については、データ レプリケーションの料金をご覧ください。

BigQuery はリージョン間のコピーでデータを圧縮して送信するので、課金対象となるデータはデータセットの実際のサイズより小さくなる場合があります。詳細については、BigQuery の料金をご覧ください。

次のステップ