テーブル スナップショットを復元する

このドキュメントでは、Google Cloud コンソール、CREATE TABLE CLONE クエリ、bq cp コマンド、または jobs.insert API を使用して、テーブルのスナップショットから書き込み可能なテーブルを作成する方法について説明します。このドキュメントは、テーブル スナップショットをよく使用するユーザーを対象としています。

権限とロール

このセクションでは、テーブルのスナップショットから書き込み可能なテーブルを作成するために必要な Identity and Access Management(IAM)権限と、それらの権限を付与する IAM 事前定義ロールについて説明します。

権限

テーブル スナップショットから書き込み可能なテーブルを作成するには、次の権限が必要です。

権限 リソース
次のすべて:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.restoreSnapshot
書き込み可能なテーブルにコピーするテーブル スナップショット。
bigquery.tables.create 宛先テーブルが含まれるデータセット。

ロール

必要な権限を持つ BigQuery 事前定義ロールは次のとおりです。

ロール リソース
次のいずれか:

bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
書き込み可能なテーブルにコピーするテーブル スナップショット。
次のいずれか:

bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
宛先テーブルが含まれるデータセット。

テーブル スナップショットを復元する

スナップショットから書き込み可能なテーブルを作成するには、コピーするテーブル スナップショットと宛先テーブルを指定します。宛先テーブルは、新しいテーブルにすることも、既存のテーブルをテーブル スナップショットで上書きすることもできます。

新しいテーブルに復元する

テーブル スナップショットを新しいテーブルに復元するには、次のいずれかのオプションを使用します。

コンソール

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

    BigQuery に移動

  2. [エクスプローラ] ペインで、復元元とするテーブル スナップショットのプロジェクトとデータセット ノードを展開します。

  3. テーブルのスナップショットの名前をクリックします。

  4. 表示されたテーブル スナップショット ペインで、[復元] をクリックします。

    スナップショットからのテーブルの復元

  5. 表示される [スナップショットの復元] ペインで、新しいテーブルのプロジェクトデータセットテーブルの情報を入力します。

  6. [保存] をクリックします。

SQL

CREATE TABLE CLONE DDL ステートメントを使用します。

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

    [BigQuery] に移動

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

    CREATE TABLE TABLE_PROJECT_ID.TABLE_DATASET_NAME.NEW_TABLE_NAME
    CLONE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME;
    

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

    • TABLE_PROJECT_ID: 新しいテーブルを作成するプロジェクトのプロジェクト ID。
    • TABLE_DATASET_NAME: 新しいテーブルを作成するデータセットの名前。
    • NEW_TABLE_NAME: 新しいテーブルの名前。
    • SNAPSHOT_PROJECT_ID: 復元元のスナップショットを含むプロジェクトのプロジェクト ID。
    • SNAPSHOT_DATASET_NAME: 復元元のスナップショットを含むデータセットの名前。
    • SNAPSHOT_NAME: 復元元のスナップショットの名前。

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

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

bq

Cloud Shell で次のコマンドを入力します。

Cloud Shell に移動

bq cp \
--restore \
--no_clobber \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.NEW_TABLE_NAME

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

  • SNAPSHOT_PROJECT_ID: 復元元のスナップショットを含むプロジェクトのプロジェクト ID。
  • SNAPSHOT_DATASET_NAME: 復元元のスナップショットを含むデータセットの名前。
  • SNAPSHOT_NAME: 復元元のスナップショットの名前。
  • TABLE_PROJECT_ID: 新しいテーブルを作成するプロジェクトのプロジェクト ID。
  • TABLE_DATASET_NAME: 新しいテーブルを作成するデータセットの名前。
  • NEW_TABLE_NAME: 新しいテーブルの名前。

--no_clobber フラグを指定すると、宛先テーブルがすでに存在する場合にコマンドが失敗します。

API

次のパラメータを指定して、jobs.insert メソッドを呼び出します。

パラメータ
projectId このオペレーションの請求先プロジェクトのプロジェクト ID。
リクエストの本文
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "SNAPSHOT_PROJECT_ID",
          "datasetId": "SNAPSHOT_DATASET_NAME",
          "tableId": "SNAPSHOT_NAME"
        }
      ],
      "destinationTable": {
        "projectId": "TABLE_PROJECT_ID",
        "datasetId": "TABLE_DATASET_NAME",
        "tableId": "NEW_TABLE_NAME"
      },
      "operationType": "RESTORE",
      "writeDisposition": "WRITE_EMPTY"
    }
  }
}

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

  • SNAPSHOT_PROJECT_ID: 復元元のスナップショットを含むプロジェクトのプロジェクト ID。
  • SNAPSHOT_DATASET_NAME: 復元元のスナップショットを含むデータセットの名前。
  • SNAPSHOT_NAME: 復元元のスナップショットの名前。
  • TABLE_PROJECT_ID: 新しいテーブルを作成するプロジェクトのプロジェクト ID。
  • TABLE_DATASET_NAME: 新しいテーブルを作成するデータセットの名前。
  • NEW_TABLE_NAME: 新しいテーブルの名前。

有効期限が指定されていない場合、宛先テーブルは、宛先テーブルを含むデータセットのデフォルトのテーブル有効期限が経過すると期限切れになります。

既存のテーブルを上書きする

既存のテーブルをテーブル スナップショットで上書きするには、次のいずれかのオプションを使用します。

コンソール

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

    BigQuery に移動

  2. [エクスプローラ] ペインで、復元元とするテーブル スナップショットのプロジェクトとデータセット ノードを展開します。

  3. テーブルのスナップショットの名前をクリックします。

  4. 表示されたテーブル スナップショット ペインで、[復元] をクリックします。

    スナップショットからのテーブルの復元

  5. 表示される [スナップショットの復元] ペインで、既存のテーブルのプロジェクトデータセットテーブルの情報を入力します。

  6. [テーブルが存在する場合は上書きする] を選択します。

  7. [保存] をクリックします。

SQL

CREATE TABLE CLONE DDL ステートメントを使用します。

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

    [BigQuery] に移動

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

    CREATE OR REPLACE TABLE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME
    CLONE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME;
    

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

    • TABLE_PROJECT_ID: 新しいテーブルを作成するプロジェクトのプロジェクト ID。
    • TABLE_DATASET_NAME: 上書きするテーブルを含むデータセットの名前。
    • TABLE_NAME: 上書きするテーブルの名前。
    • SNAPSHOT_PROJECT_ID: 復元元のスナップショットを含むプロジェクトのプロジェクト ID。
    • SNAPSHOT_DATASET_NAME: 復元元のスナップショットを含むデータセットの名前。
    • SNAPSHOT_NAME: 復元元のスナップショットの名前。

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

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

bq

Cloud Shell で次のコマンドを入力します。

Cloud Shell に移動

bq cp \
--restore \
--force \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME \
TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME

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

  • SNAPSHOT_PROJECT_ID: 復元元のスナップショットを含むプロジェクトのプロジェクト ID。
  • SNAPSHOT_DATASET_NAME: 復元元のスナップショットを含むデータセットの名前。
  • SNAPSHOT_NAME: 復元元のスナップショットの名前。
  • TABLE_PROJECT_ID: 新しいテーブルを作成するプロジェクトのプロジェクト ID。
  • TABLE_DATASET_NAME: 上書きするテーブルを含むデータセットの名前。
  • TABLE_NAME: 上書きするテーブルの名前。

API

次のパラメータを指定して、jobs.insert メソッドを呼び出します。

パラメータ
projectId このオペレーションの請求先プロジェクトのプロジェクト ID。
リクエストの本文
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "SNAPSHOT_PROJECT_ID",
          "datasetId": "SNAPSHOT_DATASET_NAME",
          "tableId": "SNAPSHOT_NAME"
        }
      ],
      "destinationTable": {
        "projectId": "TABLE_PROJECT_ID",
        "datasetId": "TABLE_DATASET_NAME",
        "tableId": "TABLE_NAME"
      },
      "operationType": "RESTORE",
      "writeDisposition": "WRITE_TRUNCATE"
    }
  }
}

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

  • SNAPSHOT_PROJECT_ID: 復元元のスナップショットを含むプロジェクトのプロジェクト ID。
  • SNAPSHOT_DATASET_NAME: 復元元のスナップショットを含むデータセットの名前。
  • SNAPSHOT_NAME: 復元元のスナップショットの名前。
  • TABLE_PROJECT_ID: 新しいテーブルを作成するプロジェクトのプロジェクト ID。
  • TABLE_DATASET_NAME: 上書きするテーブルを含むデータセットの名前。
  • TABLE_NAME: 上書きするテーブルの名前。

有効期限が指定されていない場合、宛先テーブルは、宛先テーブルを含むデータセットのデフォルトのテーブル有効期限が経過すると期限切れになります。

次のステップ