テーブル スナップショットのコピー

このドキュメントでは、Google Cloud コンソール、CREATE SNAPSHOT TABLE SQL ステートメント、bq cp -s --no_clobber コマンドまたは jobs.insert API を使用してテーブル スナップショットをコピーする方法について説明します。このチュートリアルは、BigQuery のテーブル スナップショットについての知識をある程度持ったユーザーを対象としています。

権限とロール

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

権限

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

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

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
コピーするテーブル スナップショット。
bigquery.tables.create テーブル スナップショットを含むデータセット。

ロール

必要な権限を備えた BigQuery の事前定義ロールは、次のとおりです。

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

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
コピーするテーブル スナップショット。
次のいずれか:

bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
テーブル スナップショットを含むデータセット。

制限事項

既存のテーブルやテーブル スナップショットにテーブル スナップショットをコピーすることはできません。

テーブル スナップショットの制限については、テーブル スナップショットの制限事項をご覧ください。

テーブル スナップショットをコピーする

テーブル スナップショットをコピーするプロセスは、テーブル スナップショットを作成するプロセスと似ています。相違点は、ソーステーブルとしてコピー元のテーブル スナップショットを指定することです。

テーブル スナップショットのコピーは、次のいずれかの方法で作成できます。

コンソール

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

    [BigQuery] に移動

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

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

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

  5. 表示された [テーブルのコピー] ペインで、テーブル スナップショットのコピーの送信先となるプロジェクトデータセット IDテーブル名を入力します。

  6. [コピー] をクリックします。

SQL

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

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

    [BigQuery] に移動

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

    CREATE SNAPSHOT TABLE COPY_PROJECT_ID.COPY_DATASET_NAME.COPY_NAME
    CLONE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME;
    

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

    • COPY_PROJECT_ID: スナップショット コピーを作成するプロジェクトのプロジェクト ID。
    • COPY_DATASET_NAME: スナップショット コピーを作成するデータセットの名前。
    • COPY_NAME: 作成するスナップショット コピーの名前。
    • SNAPSHOT_PROJECT_ID: コピーするスナップショットが含まれているプロジェクトのプロジェクト ID。
    • SNAPSHOT_DATASET_NAME: コピーするスナップショットが含まれているデータセットの名前。
    • SNAPSHOT_NAME: コピーするスナップショットの名前。

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

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

bq

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

Cloud Shell に移動

bq cp \
-s \
--no_clobber \
SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME \
COPY_PROJECT_ID:COPY_DATASET_NAME.COPY_NAME

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

  • SNAPSHOT_PROJECT_ID: コピーするスナップショットが含まれているプロジェクトのプロジェクト ID。
  • SNAPSHOT_DATASET_NAME: コピーするスナップショットが含まれているデータセットの名前。
  • SNAPSHOT_NAME: コピーするスナップショットの名前。
  • COPY_PROJECT_ID: スナップショット コピーを作成するプロジェクトのプロジェクト ID。
  • COPY_DATASET_NAME: スナップショット コピーを作成するデータセットの名前。
  • COPY_NAME: 作成するスナップショット コピーの名前。

--no_clobber フラグは必須です。

API

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

パラメータ
projectId このオペレーションの請求先プロジェクトのプロジェクト ID。
リクエストの本文

{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "SNAPSHOT_PROJECT_ID",
          "datasetId": "SNAPSHOT_DATASET_NAME",
          "tableId": "SNAPSHOT_NAME"
        }
      ],
      "destinationTable": {
        "projectId": "COPY_PROJECT_ID",
        "datasetId": "COPY_DATASET_NAME",
        "tableId": "COPY_NAME"
      },
      "operationType": "SNAPSHOT",
      "writeDisposition": "WRITE_EMPTY"
    }
  }
}

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

  • SNAPSHOT_PROJECT_ID: コピーするスナップショットが含まれているプロジェクトのプロジェクト ID。
  • SNAPSHOT_DATASET_NAME: コピーするスナップショットが含まれているデータセットの名前。
  • SNAPSHOT_NAME: コピーするスナップショットの名前。
  • COPY_PROJECT_ID: スナップショット コピーを作成するプロジェクトのプロジェクト ID。
  • COPY_DATASET_NAMECOPY_DATASET_NAME: スナップショット コピーを作成するデータセットの名前。
  • COPY_NAME: 作成するスナップショット コピーの名前。

次のステップ