テーブルを管理する

このドキュメントでは、BigQuery でテーブルを管理する方法について説明します。BigQuery のテーブルの管理タスクには以下のようなものがあります。

削除されたテーブルを復元する(または削除を取り消す)方法については、削除されたテーブルを復元するをご覧ください。

テーブル情報の取得、テーブルの一覧表示、テーブルデータへのアクセス制御など、テーブルの作成と使用の詳細については、テーブルの作成と使用をご覧ください。

始める前に

このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。タスクの実行に必要な権限(存在する場合)は、タスクの「必要な権限」セクションに記載されています。

テーブルのプロパティを更新する

テーブルの次の要素を更新できます。

必要な権限

テーブルのプロパティの更新に必要な権限を取得するには、テーブルに対するデータ編集者roles/bigquery.dataEditor)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、テーブルのプロパティの更新に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

テーブルのプロパティを更新するには、次の権限が必要です。

  • bigquery.tables.update
  • bigquery.tables.get

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

また、bigquery.datasets.create 権限がある場合は、作成したデータセットのテーブルのプロパティを更新できます。

テーブルの説明を更新する

テーブルの説明は次の方法で更新できます。

  • Google Cloud コンソールを使用する。
  • ALTER TABLE データ定義言語(DDL)ステートメントを使用する。
  • bq コマンドライン ツールの bq update コマンドを使用する。
  • tables.patch API メソッドを呼び出す。
  • クライアント ライブラリを使用する。
  • プレビュー版データ分析情報を使用して Gemini で説明文を生成する。

テーブルの説明を更新するには:

コンソール

Google Cloud コンソールを使用してテーブルを作成するときに説明を追加することはできません。テーブルを作成した後、[詳細] ページで説明を追加できます。

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

  2. 詳細パネルで、[詳細] をクリックします。

  3. [説明] セクションの鉛筆アイコンをクリックして、説明を編集します。

    説明の編集。

  4. ボックスに説明を入力し、[更新] をクリックして保存します。

SQL

ALTER TABLE SET OPTIONS ステートメントを使用します。次の例では、mytable という名前のテーブルの説明を更新します。

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

    [BigQuery] に移動

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

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        description = 'Description of mytable');

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

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

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. --description フラグを指定して bq update コマンドを発行します。更新するテーブルがデフォルト プロジェクト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

    bq update \
    --description "description" \
    project_id:dataset.table

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

    • description: テーブルの説明テキスト
    • project_id: プロジェクト ID
    • dataset: 更新するテーブルを含むデータセットの名前
    • table: 更新するテーブルの名前

    例:

    mydataset データセットの mytable テーブルの説明を「Description of mytable」に変更するには、次のコマンドを入力します。mydataset データセットはデフォルト プロジェクトにあります。

    bq update --description "Description of mytable" mydataset.mytable
    

    mydataset データセットの mytable テーブルの説明を「Description of mytable」に変更するには、次のコマンドを入力します。mydataset データセットは、デフォルト プロジェクトではなく myotherproject プロジェクトにあります。

    bq update \
    --description "Description of mytable" \
    myotherproject:mydataset.mytable
    
  3. API

    tables.patch メソッドを呼び出し、テーブル リソースdescription プロパティを使用して、テーブルの説明を更新します。tables.update メソッドはテーブル リソース全体を置き換えるため、tables.patch メソッドの方が適切です。

    Go

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

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

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
    func updateTableDescription(projectID, datasetID, tableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	tableRef := client.Dataset(datasetID).Table(tableID)
    	meta, err := tableRef.Metadata(ctx)
    	if err != nil {
    		return err
    	}
    	update := bigquery.TableMetadataToUpdate{
    		Description: "Updated description.",
    	}
    	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

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

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

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Table;
    
    public class UpdateTableDescription {
    
      public static void runUpdateTableDescription() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        String newDescription = "this is the new table description";
        updateTableDescription(datasetName, tableName, newDescription);
      }
    
      public static void updateTableDescription(
          String datasetName, String tableName, String newDescription) {
        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();
    
          Table table = bigquery.getTable(datasetName, tableName);
          bigquery.update(table.toBuilder().setDescription(newDescription).build());
          System.out.println("Table description updated successfully to " + newDescription);
        } catch (BigQueryException e) {
          System.out.println("Table description was not updated \n" + e.toString());
        }
      }
    }

    Python

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

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

    Table.description プロパティを構成し、Client.update_table() を呼び出して API に更新を送信します。
    # from google.cloud import bigquery
    # client = bigquery.Client()
    # project = client.project
    # dataset_ref = bigquery.DatasetReference(project, dataset_id)
    # table_ref = dataset_ref.table('my_table')
    # table = client.get_table(table_ref)  # API request
    
    assert table.description == "Original description."
    table.description = "Updated description."
    
    table = client.update_table(table, ["description"])  # API request
    
    assert table.description == "Updated description."

テーブルの有効期限を更新する

データセット レベルでデフォルトのテーブル有効期限を設定できます。また、テーブルの作成時にテーブルの有効期限を設定することもできます。テーブルの有効期限は有効期間(TTL)と呼ばれることもあります。

テーブルが期限切れになると、テーブル内のすべてのデータとともに、テーブルが削除されます。必要な場合は、データセットに指定されたタイムトラベル期間内に期限切れのテーブルの削除を取り消すことができます。詳細については、削除されたテーブルの復元をご覧ください。

テーブルの作成時に有効期限を設定した場合、データセットのデフォルトのテーブル有効期限は無視されます。データセット レベルでデフォルトのテーブル有効期限を設定せず、テーブルの作成時にもテーブル有効期限を設定しなかった場合、テーブルは無期限に有効になります。このようなテーブルは手動で削除する必要があります。

テーブルを作成した後、テーブルの有効期限を次の方法でいつでも更新できます。

  • Google Cloud コンソールを使用する。
  • ALTER TABLE データ定義言語(DDL)ステートメントを使用する。
  • bq コマンドライン ツールの bq update コマンドを使用する。
  • tables.patch API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

テーブルの有効期限を更新するには:

コンソール

Google Cloud コンソールを使用してテーブルを作成するときに有効期限を追加することはできません。テーブルを作成した後、[テーブルの詳細] ページでテーブルの有効期限を追加または更新できます。

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

  2. 詳細パネルで、[詳細] をクリックします。

  3. [テーブル情報] の横にある鉛筆アイコンをクリックします。

  4. [テーブルの有効期限] で [日付を指定] を選択します。次に、カレンダー ウィジェットで有効期限を選択します。

  5. [更新] をクリックして保存します。更新された有効期限が [テーブル情報] セクションに表示されます。

SQL

ALTER TABLE SET OPTIONS ステートメントを使用します。次の例では、mytable という名前のテーブルの有効期限を更新します。

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

    [BigQuery] に移動

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

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        -- Sets table expiration to timestamp 2025-02-03 12:34:56
        expiration_timestamp = TIMESTAMP '2025-02-03 12:34:56');

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

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

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. --expiration フラグを指定して bq update コマンドを発行します。更新するテーブルがデフォルト プロジェクト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

    bq update \
    --expiration integer \
    project_id:dataset.table

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

    • integer: テーブルのデフォルトの存続期間(秒)です。最小値は 3,600 秒(1 時間)です。現在時刻にこの整数値を足した値が有効期限になります。0 を指定すると、テーブルの有効期限が削除され、テーブルは無期限に有効になります。有効期限のないテーブルは手動で削除する必要があります。
    • project_id: プロジェクト ID。
    • dataset: 更新するテーブルを含むデータセットの名前。
    • table: 更新するテーブルの名前。

    例:

    mydataset データセットの mytable テーブルの有効期限を 5 日(432,000 秒)に更新するには、次のコマンドを入力します。mydataset データセットはデフォルト プロジェクトにあります。

    bq update --expiration 432000 mydataset.mytable
    

    mydataset データセットの mytable テーブルの有効期限を 5 日(432,000 秒)に更新するには、次のコマンドを入力します。mydataset データセットは、デフォルト プロジェクトではなく myotherproject プロジェクトにあります。

    bq update --expiration 432000 myotherproject:mydataset.mytable
    
  3. API

    tables.patch メソッドを呼び出し、テーブル リソースexpirationTime プロパティを使用して、テーブルの有効期限(ミリ秒単位)を更新します。tables.update メソッドはテーブル リソース全体を置き換えるため、tables.patch メソッドの方が適切です。

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"time"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
    // in the future, at which time it will be deleted.
    func updateTableExpiration(projectID, datasetID, tableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	tableRef := client.Dataset(datasetID).Table(tableID)
    	meta, err := tableRef.Metadata(ctx)
    	if err != nil {
    		return err
    	}
    	update := bigquery.TableMetadataToUpdate{
    		ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
    	}
    	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

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

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

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Table;
    import java.util.concurrent.TimeUnit;
    
    public class UpdateTableExpiration {
    
      public static void runUpdateTableExpiration() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        // Update table expiration to one day.
        Long newExpiration = TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS);
        updateTableExpiration(datasetName, tableName, newExpiration);
      }
    
      public static void updateTableExpiration(
          String datasetName, String tableName, Long newExpiration) {
        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();
    
          Table table = bigquery.getTable(datasetName, tableName);
          bigquery.update(table.toBuilder().setExpirationTime(newExpiration).build());
    
          System.out.println("Table expiration updated successfully to " + newExpiration);
        } catch (BigQueryException e) {
          System.out.println("Table expiration was not updated \n" + e.toString());
        }
      }
    }

    Node.js

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

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

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function updateTableExpiration() {
      // Updates a table's expiration.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = 'my_dataset', // Existing dataset
      // const tableId = 'my_table', // Existing table
      // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms
    
      // Retreive current table metadata
      const table = bigquery.dataset(datasetId).table(tableId);
      const [metadata] = await table.getMetadata();
    
      // Set new table expiration to 5 days from current time
      metadata.expirationTime = expirationTime.toString();
      const [apiResponse] = await table.setMetadata(metadata);
    
      const newExpirationTime = apiResponse.expirationTime;
      console.log(`${tableId} expiration: ${newExpirationTime}`);
    }

    Python

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

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

    Table.expires プロパティを構成し、Client.update_table() を呼び出して API に更新を送信します。
    # Copyright 2022 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
    #
    #     https://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.
    
    import datetime
    
    
    def update_table_expiration(table_id, expiration):
        orig_table_id = table_id
        orig_expiration = expiration
    
        from google.cloud import bigquery
    
        client = bigquery.Client()
    
        # TODO(dev): Change table_id to the full name of the table you want to update.
        table_id = "your-project.your_dataset.your_table_name"
    
        # TODO(dev): Set table to expire for desired days days from now.
        expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
            days=5
        )
    
        table_id = orig_table_id
        expiration = orig_expiration
    
        table = client.get_table(table_id)  # Make an API request.
        table.expires = expiration
        table = client.update_table(table, ["expires"])  # API request
    
        print(f"Updated {table_id}, expires {table.expires}.")
    

データセットのデフォルトのパーティション有効期限を更新するには:

Java

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

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.concurrent.TimeUnit;

// Sample to update partition expiration on a dataset.
public class UpdateDatasetPartitionExpiration {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    // Set the default partition expiration (applies to new tables, only) in
    // milliseconds. This example sets the default expiration to 90 days.
    Long newExpiration = TimeUnit.MILLISECONDS.convert(90, TimeUnit.DAYS);
    updateDatasetPartitionExpiration(datasetName, newExpiration);
  }

  public static void updateDatasetPartitionExpiration(String datasetName, Long newExpiration) {
    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();

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDefaultPartitionExpirationMs(newExpiration).build());
      System.out.println(
          "Dataset default partition expiration updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Dataset partition expiration was not updated \n" + e.toString());
    }
  }
}

Python

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

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

# Copyright 2019 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
#
#     https://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.


def update_dataset_default_partition_expiration(dataset_id: str) -> None:

    from google.cloud import bigquery

    # Construct a BigQuery client object.
    client = bigquery.Client()

    # TODO(developer): Set dataset_id to the ID of the dataset to fetch.
    # dataset_id = 'your-project.your_dataset'

    dataset = client.get_dataset(dataset_id)  # Make an API request.

    # Set the default partition expiration (applies to new tables, only) in
    # milliseconds. This example sets the default expiration to 90 days.
    dataset.default_partition_expiration_ms = 90 * 24 * 60 * 60 * 1000

    dataset = client.update_dataset(
        dataset, ["default_partition_expiration_ms"]
    )  # Make an API request.

    print(
        "Updated dataset {}.{} with new default partition expiration {}".format(
            dataset.project, dataset.dataset_id, dataset.default_partition_expiration_ms
        )
    )

テーブルの丸めモードを更新する

ALTER TABLE SET OPTIONS DDL ステートメントを使用して、テーブルのデフォルトの丸めモードを更新できます。次の例では、mytable のデフォルトの丸めモードを ROUND_HALF_EVEN に更新します。

ALTER TABLE mydataset.mytable
SET OPTIONS (
  default_rounding_mode = "ROUND_HALF_EVEN");

NUMERIC または BIGNUMERIC フィールドをテーブルに追加し、丸めモードを指定しないと、丸めモードは自動的にテーブルのデフォルトの丸めに設定されます。テーブルのデフォルトの丸めモードを変更しても、既存のフィールドの丸めモードは変更されません。

テーブルのスキーマ定義を更新する

テーブルのスキーマ定義の更新方法については、テーブル スキーマの変更をご覧ください。

テーブルの名前を変更する

テーブルを作成した後にテーブルの名前を変更するには、ALTER TABLE RENAME TO ステートメントを使用します。次の例では、mytable の名前を mynewtable に変更します。

ALTER TABLE mydataset.mytable
RENAME TO mynewtable;

テーブル名の変更に関する制限

  • データ ストリーミングを含むテーブルの名前を変更する場合は、ストリーミングを停止し、保留中のストリームを commit して、BigQuery がストリーミングを使用していないことを示すまで待つ必要があります。
  • 通常、テーブルの名前は最後のストリーミング オペレーションから 5 時間以内に変更されますが、それ以上かかる場合もあります。
  • 既存のテーブル ACL と行アクセス ポリシーは保持されますが、テーブル名の変更中に行われたテーブル ACL と行アクセス ポリシーの更新は保持されません。
  • テーブルの名前の変更と、そのテーブルへの DML ステートメントの実行を同時に行うことはできません。
  • テーブルの名前を変更すると、テーブルのすべての Data Catalog タグ(非推奨)と Dataplex Universal Catalog アスペクトが削除されます。
  • 外部テーブルの名前は変更できません。

テーブルをコピーする

このセクションでは、テーブルの完全なコピーを作成する方法について説明します。他のタイプのテーブルのコピーについては、テーブル クローンテーブル スナップショットをご覧ください。

次の方法でテーブルをコピーできます。

  • Google Cloud コンソールを使用する。
  • bq cp コマンドを使用する。
  • CREATE TABLE COPY データ定義言語(DDL)ステートメントを送信する。
  • jobs.insert API メソッドを呼び出して、copy ジョブを構成する。
  • クライアント ライブラリを使用する。

テーブルのコピーに関する制限事項

テーブルのコピージョブには以下の制限があります。

  • テーブルのコピー オペレーションを開始した後に停止することはできません。テーブルのコピー オペレーションは非同期で実行され、ジョブをキャンセルしても停止しません。また、クロスリージョン テーブル コピーのデータ転送と、宛先リージョンのストレージに対しても料金が発生します。
  • テーブルをコピーするとき、コピー先テーブルの名前は、テーブルの作成時と同じ命名規則に従う必要があります。
  • テーブルのコピーには、コピージョブに関する BigQuery の上限が適用されます。
  • Google Cloud コンソールでは、一度に 1 つのテーブルのみをコピーできます。コピー先データセット内の既存のテーブルを上書きすることはできません。コピーするテーブルには、コピー先データセット内で一意の名前を付ける必要があります。
  • Google Cloud コンソールでは、複数のテーブルを 1 つのテーブルにコピーすることはできません。
  • API、bq コマンドライン ツール、またはクライアント ライブラリで複数のテーブルを 1 つのテーブルにコピーする場合は、すべてのコピー元テーブルで同一のスキーマ(パーティショニングやクラスタリングなど)が使用されている必要があります。

    列の削除や名前変更など、特定のテーブル スキーマの更新を行うと、テーブルのスキーマは同じに見えても、内部表現が変わっていることがあります。これにより、テーブルのコピージョブがエラー Maximum limit on diverging physical schemas reached で失敗する可能性があります。この場合、CREATE TABLE LIKE ステートメントを使用すると、ソーステーブルのスキーマを宛先テーブルのスキーマと完全に一致させることができます。

  • BigQuery では、基盤となるストレージが動的に管理されるため、テーブルのコピーにかかる時間が大きく異なる場合があります。

  • コピー元のテーブルよりも列数が多く、追加された列がデフォルト値を持つコピー先テーブルに、コピー元テーブルをコピーして追加することはできません。代わりに、INSERT destination_table SELECT * FROM source_table を実行してデータをコピーできます。

  • コピー オペレーションが既存のテーブルを上書きする場合は、既存のテーブルに対するテーブルレベルのアクセスが維持されます。ソーステーブルのタグは上書きされるテーブルにコピーされませんが、既存のテーブルのタグは保持されます。ただし、リージョン間でテーブルをコピーすると、既存のテーブルのタグは削除されます。

  • コピー オペレーションによって新しいテーブルが作成される場合、新しいテーブルに対するテーブルレベルのアクセス権は、新しいテーブルが作成されるデータセットのアクセス ポリシーによって決まります。さらに、ソーステーブルから新しいテーブルにタグがコピーされます。

  • 複数のコピー元テーブルを 1 つのコピー先テーブルにコピーする場合は、すべてのコピー元テーブルに同じタグを設定する必要があります。

必要なロール

このドキュメントのタスクを実行するには、次の権限が必要です。

テーブルとパーティションをコピーするロール

テーブルとパーティションのコピーに必要な権限を取得するには、コピー元データセットとコピー先データセットに対するデータ編集者roles/bigquery.dataEditor)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、テーブルとパーティションのコピーに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

テーブルとパーティションをコピーするには、次の権限が必要です。

  • ソース データセットとコピー先データセットに対する bigquery.tables.getData
  • ソース データセットとコピー先データセットに対する bigquery.tables.get
  • コピー先データセットに対する bigquery.tables.create
  • コピー先データセットに対する bigquery.tables.update

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

コピージョブを実行する権限

コピージョブを実行するために必要な権限を取得するには、コピー元データセットとコピー先データセットに対するジョブユーザーroles/bigquery.jobUser)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、コピージョブを実行するために必要な bigquery.jobs.create 権限が含まれています。

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

単一ソースのテーブルをコピーする

次の方法で 1 つのテーブルをコピーできます。

  • Google Cloud コンソールを使用する。
  • bq コマンドライン ツールの bq cp コマンドを使用する。
  • CREATE TABLE COPY データ定義言語(DDL)ステートメントを使用する。
  • jobs.insert API メソッドを呼び出して、copy ジョブを構成し、sourceTable プロパティを指定する。
  • クライアント ライブラリを使用する。

Google Cloud コンソールと CREATE TABLE COPY ステートメントを使用する場合、コピージョブにはコピー元テーブルとコピー先テーブルをそれぞれ 1 つのみ指定できます。複数のファイルを 1 つのテーブルにコピーするには、bq コマンドライン ツールまたは API を使用する必要があります。

1 つのテーブルをコピーするには:

Console

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

  2. 詳細パネルで [テーブルをコピー] をクリックします。

  3. [テーブルのコピー] ダイアログの [コピー先] で次の操作を行います。

    • [プロジェクト名] で、コピーしたテーブルを保存するプロジェクトを選択します。
    • [データセット名] で、コピーしたテーブルを保存するデータセットを選択します。コピー元データセットとコピー先データセットは同じロケーションに存在する必要があります。
    • [テーブル名] に新しいテーブルの名前を入力します。この名前はコピー先データセット内で一意である必要があります。 Google Cloud コンソールを使用して、コピー先データセット内の既存のテーブルを上書きすることはできません。テーブル名の要件の詳細については、テーブルの命名をご覧ください。
  4. [コピー] をクリックして、コピージョブを開始します。

SQL

CREATE TABLE COPY ステートメントを使用して、table1 という名前のテーブルを table1copy という名前の新しいテーブルにコピーします。

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

    [BigQuery] に移動

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

    CREATE TABLE myproject.mydataset.table1copy
    COPY myproject.mydataset.table1;

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

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

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. bq cp コマンドを発行します。オプションのフラグを使用して、コピー先テーブルの書き込み処理を制御できます。

    • -a または --append_table を指定すると、コピー元テーブルのデータがコピー先データセット内の既存のテーブルの末尾に追加されます。
    • -f または --force を指定すると、コピー先データセット内の既存のテーブルが上書きされます。確認を求めるプロンプトは表示されません。
    • -n または --no_clobber を指定すると、コピー先データセット内にテーブルが存在している場合に Table 'project_id:dataset.table' already exists, skipping. というエラー メッセージが返されます。-n を指定しなかった場合、デフォルトでは、コピー先テーブルを置き換えるかどうかを選択するプロンプトが表示されます。
    • --destination_kms_key には、顧客管理の Cloud KMS 鍵を指定します。これは、コピー先テーブルを暗号化する場合に使用します。

    --destination_kms_key はここでは説明しません。詳細については、Cloud Key Management Service 鍵によるデータの保護をご覧ください。

    コピー元またはコピー先のデータセットがデフォルト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

    (省略可)--location フラグを指定して、その値をロケーションに設定します。

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table \
    project_id:dataset.destination_table

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

    • location: ロケーションの名前。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
    • project_id: プロジェクト ID。
    • dataset: コピー元データセットまたはコピー先データセットの名前。
    • source_table: コピーするテーブル。
    • destination_table: 宛先データセット内のテーブル名。

    例:

    mydataset.mytable テーブルを mydataset2.mytable2 テーブルにコピーするには、次のコマンドを入力します。データセットは両方ともデフォルト プロジェクトにあります。

    bq cp mydataset.mytable mydataset2.mytable2
    

    mydataset.mytable テーブルをコピーして、同じ名前が付いたコピー先のテーブルを上書きするには、次のコマンドを入力します。コピー元データセットはデフォルト プロジェクトにあります。コピー先データセットは、myotherproject プロジェクトにあります。-f ショートカットが指定されているため、コピー先テーブルは確認プロンプトなしで上書きされます。

    bq cp -f \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    mydataset.mytable テーブルのコピーで、コピー先データセットに同じ名前のテーブルがある場合にエラーを返すには、次のコマンドを入力します。コピー元データセットはデフォルト プロジェクトにあります。コピー先データセットは、myotherproject プロジェクトにあります。-n ショートカットが指定されているため、同じ名前のテーブルが上書きされることはありません。

    bq cp -n \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    mydataset.mytable テーブルをコピーして、同じ名前が付いたコピー先のテーブルに追加するには、次のコマンドを入力します。コピー元データセットはデフォルト プロジェクトにあります。コピー先データセットは、myotherproject プロジェクトにあります。- a ショートカットが指定されているため、コピー先テーブルの末尾にデータが追加されます。

    bq cp -a mydataset.mytable myotherproject:myotherdataset.mytable
    
  3. API

    API を使用して既存のテーブルをコピーするには、bigquery.jobs.insert メソッドを呼び出し、copy ジョブを構成します。ジョブリソースjobReference セクションにある location プロパティでロケーションを指定します。

    ジョブ構成で次の値を指定する必要があります。

    "copy": {
          "sourceTable": {       // Required
            "projectId": string, // Required
            "datasetId": string, // Required
            "tableId": string    // Required
          },
          "destinationTable": {  // Required
            "projectId": string, // Required
            "datasetId": string, // Required
            "tableId": string    // Required
          },
          "createDisposition": string,  // Optional
          "writeDisposition": string,   // Optional
        },
    

    sourceTable にはコピーするテーブルの情報、destinationTable には新しいテーブルの情報を指定します。createDisposition には同名のテーブルが存在しない場合に新しく作成するかどうか、writeDisposition には既存のテーブルを上書きするかデータを追加するかを指定します。

    C#

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

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

    
    using Google.Apis.Bigquery.v2.Data;
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryCopyTable
    {
        public void CopyTable(
            string projectId = "your-project-id",
            string destinationDatasetId = "your_dataset_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            TableReference sourceTableRef = new TableReference()
            {
                TableId = "shakespeare",
                DatasetId = "samples",
                ProjectId = "bigquery-public-data"
            };
            TableReference destinationTableRef = client.GetTableReference(
                destinationDatasetId, "destination_table");
            BigQueryJob job = client.CreateCopyJob(
                sourceTableRef, destinationTableRef)
                .PollUntilCompleted() // Wait for the job to complete.
                .ThrowOnAnyError();
    
            // Retrieve destination table
            BigQueryTable destinationTable = client.GetTable(destinationTableRef);
            Console.WriteLine(
                $"Copied {destinationTable.Resource.NumRows} rows from table "
                + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
                + $"to {destinationTable.FullyQualifiedId}."
            );
        }
    }

    Go

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

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

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyTable demonstrates copying a table from a source to a destination, and
    // allowing the copy to overwrite existing data by using truncation.
    func copyTable(projectID, datasetID, srcID, dstID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// srcID := "sourcetable"
    	// dstID := "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	dataset := client.Dataset(datasetID)
    	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

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

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

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    
    public class CopyTable {
    
      public static void runCopyTable() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
        String destinationTableId = "MY_DESTINATION_TABLE_NAME";
        String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
        String sourceTableId = "MY_SOURCE_TABLE_NAME";
    
        copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
      }
    
      public static void copyTable(
          String sourceDatasetName,
          String sourceTableId,
          String destinationDatasetName,
          String destinationTableId) {
        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();
    
          TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \n" + e.toString());
        }
      }
    }

    Node.js

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

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

    // Import the Google Cloud client library and create a client
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTable() {
      // Copies src_dataset:src_table to dest_dataset:dest_table.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample
       */
      // const srcDatasetId = "my_src_dataset";
      // const srcTableId = "my_src_table";
      // const destDatasetId = "my_dest_dataset";
      // const destTableId = "my_dest_table";
    
      // Copy the table contents into another table
      const [job] = await bigquery
        .dataset(srcDatasetId)
        .table(srcTableId)
        .copy(bigquery.dataset(destDatasetId).table(destTableId));
    
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }

    PHP

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

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

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $sourceTableId   = 'The BigQuery table ID to copy from';
    // $destinationTableId = 'The BigQuery table ID to copy to';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $sourceTable = $dataset->table($sourceTableId);
    $destinationTable = $dataset->table($destinationTableId);
    $copyConfig = $sourceTable->copy($destinationTable);
    $job = $sourceTable->runJob($copyConfig);
    
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $backoff->execute(function () use ($job) {
        print('Waiting for job to complete' . PHP_EOL);
        $job->reload();
        if (!$job->isComplete()) {
            throw new Exception('Job has not yet completed', 500);
        }
    });
    // check if the job has errors
    if (isset($job->info()['status']['errorResult'])) {
        $error = $job->info()['status']['errorResult']['message'];
        printf('Error running job: %s' . PHP_EOL, $error);
    } else {
        print('Table copied successfully' . PHP_EOL);
    }

    Python

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

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

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set source_table_id to the ID of the original table.
    # source_table_id = "your-project.source_dataset.source_table"
    
    # TODO(developer): Set destination_table_id to the ID of the destination table.
    # destination_table_id = "your-project.destination_dataset.destination_table"
    
    job = client.copy_table(source_table_id, destination_table_id)
    job.result()  # Wait for the job to complete.
    
    print("A copy of the table created.")

複数のテーブルをコピーする

次の方法で、複数のテーブルを 1 つのテーブルにコピーできます。

  • bq コマンドライン ツールの bq cp コマンドを使用する。
  • jobs.insert メソッドを呼び出して、copy ジョブを構成し、sourceTables プロパティを指定する。
  • クライアント ライブラリを使用する。

すべてのコピー元テーブルのスキーマとタグが同一である必要があります。また、指定できるコピー先テーブルは 1 つだけです。

コピー元テーブルは、カンマ区切りのリストとして指定する必要があります。複数のコピー元テーブルをコピーする場合、ワイルドカードは使用できません。

複数の参照元テーブルをコピーするには、次の選択肢のいずれかを選択します。

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. bq cp コマンドを発行し、複数のコピー元テーブルをカンマ区切りのリストとして指定します。オプションのフラグを使用して、コピー先テーブルの書き込み処理を制御できます。

    • -a または --append_table を指定すると、コピー元テーブルのデータがコピー先データセット内の既存のテーブルの末尾に追加されます。
    • -f または --force を指定すると、コピー先データセット内の既存のコピー先テーブルが上書きされます。確認を求めるプロンプトは表示されません。
    • -n または --no_clobber を指定すると、コピー先データセット内にテーブルが存在している場合に Table 'project_id:dataset.table' already exists, skipping. というエラー メッセージが返されます。-n を指定しなかった場合、デフォルトでは、コピー先テーブルを置き換えるかどうかを選択するプロンプトが表示されます。
    • --destination_kms_key には、顧客管理の Cloud Key Management Service 鍵を指定します。これは、コピー先テーブルを暗号化する場合に使用します。

    --destination_kms_key はここでは説明しません。詳細については、Cloud Key Management Service 鍵によるデータの保護をご覧ください。

    コピー元またはコピー先のデータセットがデフォルト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

    (省略可)--location フラグを指定して、その値をロケーションに設定します。

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table,project_id:dataset.source_table \
    project_id:dataset.destination_table

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

    • location: ロケーションの名前。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
    • project_id: プロジェクト ID。
    • dataset: コピー元データセットまたはコピー先データセットの名前。
    • source_table: コピー元のテーブル。
    • destination_table: 宛先データセット内のテーブル名。

    例:

    mydataset.mytable テーブルと mydataset.mytable2 テーブルを mydataset2.tablecopy テーブルにコピーするには、次のコマンドを入力します。データセットはすべてデフォルト プロジェクトにあります。

    bq cp \
    mydataset.mytable,mydataset.mytable2 \
    mydataset2.tablecopy

    mydataset.mytable テーブルと mydataset.mytable2 テーブルを myotherdataset.mytable テーブルにコピーして、同じ名前が付いたコピー先のテーブルを上書きするには、次のコマンドを入力します。コピー先データセットは、デフォルト プロジェクトではなく myotherproject プロジェクトにあります。-f ショートカットが指定されているため、コピー先テーブルは確認プロンプトなしで上書きされます。

    bq cp -f \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    myproject:mydataset.mytable テーブルと myproject:mydataset.mytable2 テーブルのコピーで、コピー先データセットに同じ名前のテーブルがある場合にエラーを返すには、次のコマンドを入力します。コピー先データセットは、myotherproject プロジェクトにあります。-n ショートカットが指定されているため、同じ名前のテーブルが上書きされることはありません。

    bq cp -n \
    myproject:mydataset.mytable,myproject:mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    mydataset.mytable テーブルと mydataset.mytable2 テーブルをコピーして、同じ名前が付いたコピー先のテーブルに追加するには、次のコマンドを入力します。コピー元データセットはデフォルト プロジェクトにあります。コピー先データセットは、myotherproject プロジェクトにあります。-a ショートカットが指定されているため、コピー先テーブルの末尾にデータが追加されます。

    bq cp -a \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable
  3. API

    API を使用して複数のテーブルをコピーするには、jobs.insert メソッドを呼び出して copy ジョブを構成し、sourceTables プロパティを指定します。

    ジョブリソースjobReference セクションにある location プロパティでリージョンを指定します。

    Go

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

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

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyMultiTable demonstrates using a copy job to copy multiple source tables into a single destination table.
    func copyMultiTable(projectID, srcDatasetID string, srcTableIDs []string, dstDatasetID, dstTableID string) error {
    	// projectID := "my-project-id"
    	// srcDatasetID := "sourcedataset"
    	// srcTableIDs := []string{"table1","table2"}
    	// dstDatasetID = "destinationdataset"
    	// dstTableID = "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	srcDataset := client.Dataset(srcDatasetID)
    	dstDataset := client.Dataset(dstDatasetID)
    	var tableRefs []*bigquery.Table
    	for _, v := range srcTableIDs {
    		tableRefs = append(tableRefs, srcDataset.Table(v))
    	}
    	copier := dstDataset.Table(dstTableID).CopierFrom(tableRefs...)
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

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

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

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    import java.util.Arrays;
    
    public class CopyMultipleTables {
    
      public static void runCopyMultipleTables() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DATASET_NAME";
        String destinationTableId = "MY_TABLE_NAME";
        copyMultipleTables(destinationDatasetName, destinationTableId);
      }
    
      public static void copyMultipleTables(String destinationDatasetName, String destinationTableId) {
        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();
    
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(
                      destinationTable,
                      Arrays.asList(
                          TableId.of(destinationDatasetName, "table1"),
                          TableId.of(destinationDatasetName, "table2")))
                  .build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy tables due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \n" + e.toString());
        }
      }
    }

    Node.js

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

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

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTableMultipleSource() {
      // Copy multiple source tables to a given destination.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = "my_dataset";
      // sourceTable = 'my_table';
      // destinationTable = 'testing';
    
      // Create a client
      const dataset = bigquery.dataset(datasetId);
    
      const metadata = {
        createDisposition: 'CREATE_NEVER',
        writeDisposition: 'WRITE_TRUNCATE',
      };
    
      // Create table references
      const table = dataset.table(sourceTable);
      const yourTable = dataset.table(destinationTable);
    
      // Copy table
      const [apiResponse] = await table.copy(yourTable, metadata);
      console.log(apiResponse.configuration.copy);
    }

    Python

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

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

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set dest_table_id to the ID of the destination table.
    # dest_table_id = "your-project.your_dataset.your_table_name"
    
    # TODO(developer): Set table_ids to the list of the IDs of the original tables.
    # table_ids = ["your-project.your_dataset.your_table_name", ...]
    
    job = client.copy_table(table_ids, dest_table_id)  # Make an API request.
    job.result()  # Wait for the job to complete.
    
    print("The tables {} have been appended to {}".format(table_ids, dest_table_id))

リージョン間でのテーブルのコピー

テーブル、テーブル スナップショット、またはテーブル クローンを、ある BigQuery リージョンまたはマルチリージョンから別のリージョンにコピーできます。これには、顧客管理の Cloud KMS(CMEK)が適用されたテーブルが含まれます。

リージョン間でテーブルをコピーすると、BigQuery の料金に従って追加のデータ転送料金が発生します。クロスリージョン テーブル コピー ジョブを完了する前にキャンセルした場合でも、追加料金が発生します。

リージョン間でテーブルをコピーするには、次のいずれかのオプションを選択します。

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. bq cp コマンドを実行します。

  3.    bq cp \
       -f -n \
       SOURCE_PROJECT:SOURCE_DATASET.SOURCE_TABLE \
       DESTINATION_PROJECT:DESTINATION_DATASET.DESTINATION_TABLE
       

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

    • SOURCE_PROJECT: ソース プロジェクト ID。ソース データセットがデフォルト プロジェクト以外のプロジェクトにある場合は、ソース データセット名にプロジェクト ID を追加します。

    • DESTINATION_PROJECT: 宛先プロジェクト IDコピー先のデータセットがデフォルト プロジェクト以外のプロジェクトにある場合は、コピー先のデータセット名にプロジェクト ID を追加します。

    • SOURCE_DATASET: ソース データセットの名前。

    • DESTINATION_DATASET: コピー先データセットの名前。

    • SOURCE_TABLE: コピーするテーブル。

    • DESTINATION_TABLE: コピー先データセット内のテーブル名。

    次の例は、mydataset_us.mytable テーブルを us マルチリージョンから eu マルチリージョンの mydataset_eu.mytable2 テーブルにコピーするコマンドです。データセットは両方ともデフォルト プロジェクトにあります。

    bq cp --sync=false mydataset_us.mytable mydataset_eu.mytable2
    

    リージョン間でテーブルを CMEK 対応のコピー先データセットにコピーするには、テーブルのリージョンの鍵を使用してテーブルで CMEK を有効にする必要があります。テーブルの CMEK は、コピー先データセットで使用されている CMEK と同じである必要はありません。次の例では、bq cp コマンドを使用して、CMEK 対応テーブルをコピー先データセットにコピーします。

    bq cp source-project-id:source-dataset-id.source-table-id destination-project-id:destination-dataset-id.destination-table-id
    

    逆に、リージョン間で CMEK 対応テーブルをコピー先データセットにコピーするには、コピー先データセットのリージョンの鍵を使用してコピー先データセットで CMEK を有効にします。次の例に示すように、bq cp コマンドで destination_kms_keys フラグを使用することもできます。

    bq cp --destination_kms_key=projects/project_id/locations/eu/keyRings/eu_key/cryptoKeys/eu_region mydataset_us.mytable mydataset_eu.mytable2
    

    API

    API を使用してリージョン間でテーブルをコピーするには、jobs.insert メソッドを呼び出して、テーブルの copy ジョブを構成します。

    ジョブリソースjobReference セクションにある location プロパティでリージョンを指定します。

    C#

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

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

    
    using Google.Apis.Bigquery.v2.Data;
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryCopyTable
    {
        public void CopyTable(
            string projectId = "your-project-id",
            string destinationDatasetId = "your_dataset_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            TableReference sourceTableRef = new TableReference()
            {
                TableId = "shakespeare",
                DatasetId = "samples",
                ProjectId = "bigquery-public-data"
            };
            TableReference destinationTableRef = client.GetTableReference(
                destinationDatasetId, "destination_table");
            BigQueryJob job = client.CreateCopyJob(
                sourceTableRef, destinationTableRef)
                .PollUntilCompleted() // Wait for the job to complete.
                .ThrowOnAnyError();
    
            // Retrieve destination table
            BigQueryTable destinationTable = client.GetTable(destinationTableRef);
            Console.WriteLine(
                $"Copied {destinationTable.Resource.NumRows} rows from table "
                + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
                + $"to {destinationTable.FullyQualifiedId}."
            );
        }
    }

    Go

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

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

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyTable demonstrates copying a table from a source to a destination, and
    // allowing the copy to overwrite existing data by using truncation.
    func copyTable(projectID, datasetID, srcID, dstID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// srcID := "sourcetable"
    	// dstID := "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	dataset := client.Dataset(datasetID)
    	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

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

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

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    
    public class CopyTable {
    
      public static void runCopyTable() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
        String destinationTableId = "MY_DESTINATION_TABLE_NAME";
        String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
        String sourceTableId = "MY_SOURCE_TABLE_NAME";
    
        copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
      }
    
      public static void copyTable(
          String sourceDatasetName,
          String sourceTableId,
          String destinationDatasetName,
          String destinationTableId) {
        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();
    
          TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \n" + e.toString());
        }
      }
    }

    Node.js

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

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

    // Import the Google Cloud client library and create a client
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTable() {
      // Copies src_dataset:src_table to dest_dataset:dest_table.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample
       */
      // const srcDatasetId = "my_src_dataset";
      // const srcTableId = "my_src_table";
      // const destDatasetId = "my_dest_dataset";
      // const destTableId = "my_dest_table";
    
      // Copy the table contents into another table
      const [job] = await bigquery
        .dataset(srcDatasetId)
        .table(srcTableId)
        .copy(bigquery.dataset(destDatasetId).table(destTableId));
    
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }

    PHP

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

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

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $sourceTableId   = 'The BigQuery table ID to copy from';
    // $destinationTableId = 'The BigQuery table ID to copy to';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $sourceTable = $dataset->table($sourceTableId);
    $destinationTable = $dataset->table($destinationTableId);
    $copyConfig = $sourceTable->copy($destinationTable);
    $job = $sourceTable->runJob($copyConfig);
    
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $backoff->execute(function () use ($job) {
        print('Waiting for job to complete' . PHP_EOL);
        $job->reload();
        if (!$job->isComplete()) {
            throw new Exception('Job has not yet completed', 500);
        }
    });
    // check if the job has errors
    if (isset($job->info()['status']['errorResult'])) {
        $error = $job->info()['status']['errorResult']['message'];
        printf('Error running job: %s' . PHP_EOL, $error);
    } else {
        print('Table copied successfully' . PHP_EOL);
    }

    Python

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

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

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set source_table_id to the ID of the original table.
    # source_table_id = "your-project.source_dataset.source_table"
    
    # TODO(developer): Set destination_table_id to the ID of the destination table.
    # destination_table_id = "your-project.destination_dataset.destination_table"
    
    job = client.copy_table(source_table_id, destination_table_id)
    job.result()  # Wait for the job to complete.
    
    print("A copy of the table created.")

制限事項

リージョン間でテーブルをコピーする場合は、次の制限があります。

  • Google Cloud コンソールまたは TABLE COPY DDL ステートメントを使用してテーブルをコピーすることはできません。
  • コピー元テーブルにポリシータグがある場合は、テーブルをコピーできません。
  • ソーステーブルの物理サイズが 20 TiB を超える場合、テーブルをコピーすることはできません。ソーステーブルの物理サイズについては、テーブルに関する情報を取得するをご覧ください。また、物理サイズが 1 TiB を超えるコピー元テーブルをリージョン間でコピーする場合、コピーを正常に完了するために複数回の再試行が必要になることがあります。
  • テーブルに関連付けられている IAM ポリシーはコピーできません。コピーが完了したら、同じポリシーをコピー先に適用できます。
  • コピー オペレーションで既存のテーブルが上書きされると、既存のテーブルのタグが削除されます。
  • 複数のテーブルを 1 つのテーブルにコピーすることはできません。
  • 追加モードではテーブルをコピーできません。
  • タイムトラベル情報は、コピー先のリージョンにコピーされません。
  • テーブル クローンまたはスナップショットを新しいリージョンにコピーすると、テーブルの完全コピーが作成されます。これにより、追加のストレージ費用が発生します。

現在の割り当て使用量を確認する

クエリ、読み込み、抽出、コピージョブの現在の使用状況を確認するには、INFORMATION_SCHEMA クエリを実行して、指定した期間に実行されたジョブに関するメタデータを表示します。現在の使用量と割り当て上限を比較することで、特定の種類のジョブの割り当て使用量を確認できます。次のクエリの例では、INFORMATION_SCHEMA.JOBS ビューを使用して、プロジェクトごとにクエリ、読み込み、抽出、コピーの各ジョブの数の一覧を表示します。

SELECT
  sum(case  when job_type="QUERY" then 1 else 0 end) as QRY_CNT,
  sum(case  when job_type="LOAD" then 1 else 0 end) as LOAD_CNT,
  sum(case  when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT,
  sum(case  when job_type="COPY" then 1 else 0 end) as CPY_CNT
FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE date(creation_time)= CURRENT_DATE()

コピージョブの割り当て上限を表示するには、割り当てと上限 - コピージョブをご覧ください。

テーブルを削除する

テーブルは次の方法で削除できます。

  • Google Cloud コンソールを使用する。
  • DROP TABLE データ定義言語(DDL)ステートメントを使用する。
  • bq コマンドライン ツールの bq rm コマンドを使用する。
  • tables.delete API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

データセット内のすべてのテーブルを削除するには、データセットを削除します。

テーブルを削除すると、そのテーブルに含まれるデータも削除されます。指定した期間の経過後にテーブルを自動的に削除するには、データセットのデフォルトのテーブル有効期限を設定するか、テーブルの作成時に有効期限を設定します。

テーブルを削除すると、このテーブルに関連付けられている権限も削除されます。削除されたテーブルを再作成する場合は、以前にそのテーブルに関連付けられていたアクセス権限を手動で再構成する必要があります。

必要なロール

テーブルを削除するために必要な権限を取得するには、データセットに対するデータ編集者roles/bigquery.dataEditor)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、テーブルの削除に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

テーブルを削除するには、次の権限が必要です。

  • bigquery.tables.delete
  • bigquery.tables.get

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

テーブルを削除する

テーブルを削除するには:

Console

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

  2. 詳細パネルで [テーブルを削除] をクリックします。

  3. ダイアログに「"delete"」と入力し、[削除] をクリックして確定します。

SQL

DROP TABLE ステートメントを使用します。次の例では、mytable という名前のテーブルを削除します。

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

    [BigQuery] に移動

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

    DROP TABLE mydataset.mytable;

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

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

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. bq rm コマンドに --table フラグ(または -t ショートカット)を指定して実行して、テーブルを削除します。bq コマンドライン ツールを使用してテーブルを削除する場合、操作の確認を求められます。--forceフラグ(または -f ショートカット)を使用すると、確認をスキップできます。

    デフォルト以外のプロジェクトのデータセットにテーブルがある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

    bq rm \
    -f \
    -t \
    project_id:dataset.table

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

    • project_id: プロジェクト ID
    • dataset: テーブルを含むデータセットの名前
    • table: 削除するテーブルの名前

    例:

    mytable テーブルを mydataset データセットから削除するには、次のコマンドを入力します。mydataset データセットはデフォルト プロジェクトにあります。

    bq rm -t mydataset.mytable
    

    mytable テーブルを mydataset データセットから削除するには、次のコマンドを入力します。mydataset データセットは、デフォルト プロジェクトではなく myotherproject プロジェクトにあります。

    bq rm -t myotherproject:mydataset.mytable
    

    mytable テーブルを mydataset データセットから削除するには、次のコマンドを入力します。mydataset データセットはデフォルト プロジェクトにあります。このコマンドでは -f ショートカットを使用しているため、確認は省略されます。

    bq rm -f -t mydataset.mytable
    
  3. API

    tables.delete API メソッドを呼び出して、tableId パラメータを使用して削除するテーブルを指定します。

    C#

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

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

    
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryDeleteTable
    {
        public void DeleteTable(
            string projectId = "your-project-id",
            string datasetId = "your_dataset_id",
            string tableId = "your_table_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            client.DeleteTable(datasetId, tableId);
            Console.WriteLine($"Table {tableId} deleted.");
        }
    }

    Go

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

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

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // deleteTable demonstrates deletion of a BigQuery table.
    func deleteTable(projectID, datasetID, tableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	table := client.Dataset(datasetID).Table(tableID)
    	if err := table.Delete(ctx); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

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

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

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class DeleteTable {
    
      public static void runDeleteTable() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        deleteTable(datasetName, tableName);
      }
    
      public static void deleteTable(String datasetName, String tableName) {
        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();
          boolean success = bigquery.delete(TableId.of(datasetName, tableName));
          if (success) {
            System.out.println("Table deleted successfully");
          } else {
            System.out.println("Table was not found");
          }
        } catch (BigQueryException e) {
          System.out.println("Table was not deleted. \n" + e.toString());
        }
      }
    }

    Node.js

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

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

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function deleteTable() {
      // Deletes "my_table" from "my_dataset".
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = "my_dataset";
      // const tableId = "my_table";
    
      // Delete the table
      await bigquery
        .dataset(datasetId)
        .table(tableId)
        .delete();
    
      console.log(`Table ${tableId} deleted.`);
    }

    PHP

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

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

    use Google\Cloud\BigQuery\BigQueryClient;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $tableId = 'The BigQuery table ID';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $table = $dataset->table($tableId);
    $table->delete();
    printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

    Python

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

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

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set table_id to the ID of the table to fetch.
    # table_id = 'your-project.your_dataset.your_table'
    
    # If the table does not exist, delete_table raises
    # google.api_core.exceptions.NotFound unless not_found_ok is True.
    client.delete_table(table_id, not_found_ok=True)  # Make an API request.
    print("Deleted table '{}'.".format(table_id))

    Ruby

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

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

    require "google/cloud/bigquery"
    
    def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
      bigquery = Google::Cloud::Bigquery.new
      dataset  = bigquery.dataset dataset_id
      table    = dataset.table table_id
    
      table.delete
    
      puts "Table #{table_id} deleted."
    end

削除されたテーブルを復元する

削除されたテーブルを復元する方法、または削除を取り消す方法については、削除されたテーブルを復元するをご覧ください。

テーブルのセキュリティ

BigQuery でテーブルへのアクセスを制御するには、IAM を使用してリソースへのアクセスを制御するをご覧ください。

次のステップ