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

このドキュメントでは、CREATE TABLE CLONE クエリの実行、bq copy --restore コマンドの使用、または jobs.insert API の呼び出しによって、テーブル スナップショットから BigQuery テーブルを復元する方法について説明します。このドキュメントは、テーブル スナップショットをよく使用するユーザーを対象としています。

権限とロール

このセクションでは、テーブル スナップショットの復元に必要な Identity and Access Management(IAM)権限と、その権限を付与する IAM 事前定義ロールについて説明します。

権限

テーブル スナップショットを復元するには、次の権限がすべて必要です。

権限 リソース
bigquery.tables.get 復元するテーブル スナップショット。
bigquery.tables.getData 復元するテーブル スナップショット。
bigquery.tables.restoreSnapshot 復元するテーブル スナップショット。
bigquery.tables.create 宛先テーブルが含まれるデータセット。

ロール

テーブル スナップショットを作成するために必要な最小限の事前定義ロールは次のとおりです。

ロール リソース
bigquery.dataEditor 復元するテーブル スナップショット。
bigquery.dataEditor 宛先テーブルが含まれるデータセット。

テーブル スナップショットを復元します。

スナップショットを復元するには、復元に使用するテーブル スナップショットと宛先テーブルを指定します。宛先テーブルは、新しいテーブルにすることも、既存のテーブルをテーブル スナップショットで上書きすることもできます。

新しいテーブルへの復元

たとえば、テーブル スナップショット library_backup.books は、次のようにして新しいテーブル library.books_new に復元します。

SQL

次のクエリを実行します。

CREATE TABLE library.books_new
  CLONE library_backup.books

bq

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

Cloud Shell に移動

bq cp --restore --no_clobber library_backup.books library.books_new

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

API

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

パラメータ
projectId myProject
リクエストの本文

{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "myProject",
          "datasetId": "library_backup",
          "tableId": "books"
        }
      ],
      "destinationTable": {
        "projectId": "myProject",
        "datasetId": "library",
        "tableId": "books_new"
      },
      "operationType": "RESTORE",
      "writeDisposition": "WRITE_EMPTY"
    }
  }
}

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

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

次に示すように、既存のテーブル library.books を上書きすることで、テーブル スナップショット library_backup.books を復元します。

SQL

次のクエリを実行します。

CREATE OR REPLACE TABLE
  library.books
  CLONE library_backup.books

bq

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

Cloud Shell に移動

bq cp --restore --force library_backup.books library.books

API

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

パラメータ
projectId myProject
リクエストの本文

{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "myProject",
          "datasetId": "library_backup",
          "tableId": "books"
        }
      ],
      "destinationTable": {
        "projectId": "myProject",
        "datasetId": "library",
        "tableId": "books"
      },
      "operationType": "RESTORE",
      "writeDisposition": "WRITE_TRUNCATE"
    }
  }
}

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

テーブルのセキュリティ

BigQuery でテーブルへのアクセスを制御するには、テーブルのアクセス制御の概要をご覧ください。

次のステップ