テーブル スナップショットを復元する
このドキュメントでは、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
|
宛先テーブルが含まれるデータセット。 |
テーブル スナップショットを復元する
スナップショットから書き込み可能なテーブルを作成するには、コピーするテーブル スナップショットと宛先テーブルを指定します。宛先テーブルは、新しいテーブルにすることも、既存のテーブルをテーブル スナップショットで上書きすることもできます。
新しいテーブルに復元する
テーブル スナップショットを新しいテーブルに復元するには、次のいずれかのオプションを使用します。
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、復元元とするテーブル スナップショットのプロジェクトとデータセット ノードを展開します。
テーブルのスナップショットの名前をクリックします。
表示されたテーブル スナップショット ペインで、[復元] をクリックします。
表示される [スナップショットの復元] ペインで、新しいテーブルのプロジェクト、データセット、テーブルの情報を入力します。
[保存] をクリックします。
SQL
CREATE TABLE CLONE
DDL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
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
: 復元元のスナップショットの名前。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
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
: 新しいテーブルの名前。
有効期限が指定されていない場合、宛先テーブルは、宛先テーブルを含むデータセットのデフォルトのテーブル有効期限が経過すると期限切れになります。
既存のテーブルを上書きする
既存のテーブルをテーブル スナップショットで上書きするには、次のいずれかのオプションを使用します。
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、復元元とするテーブル スナップショットのプロジェクトとデータセット ノードを展開します。
テーブルのスナップショットの名前をクリックします。
表示されたテーブル スナップショット ペインで、[復元] をクリックします。
表示される [スナップショットの復元] ペインで、既存のテーブルのプロジェクト、データセット、テーブルの情報を入力します。
[テーブルが存在する場合は上書きする] を選択します。
[保存] をクリックします。
SQL
CREATE TABLE CLONE
DDL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
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
: 復元元のスナップショットの名前。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
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
: 上書きするテーブルの名前。
有効期限が指定されていない場合、宛先テーブルは、宛先テーブルを含むデータセットのデフォルトのテーブル有効期限が経過すると期限切れになります。