ビューの管理

このドキュメントでは、BigQuery でビューを管理する方法について説明します。BigQuery ビューは、次の方法で管理できます。

始める前に

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

ビューを更新する

ビューを作成したら、次のビュー プロパティを更新できます。

必要な権限

ビューを更新するには、次の IAM 権限が必要です。

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

次の IAM 事前定義ロールには、ビューの更新に必要な権限が含まれています。

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

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

ビューの SQL クエリを更新するには、ビューの SQL クエリで参照されるテーブルに対してクエリを実行する権限も必要です。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

ビューの SQL クエリの更新

ビューの定義に使用される SQL クエリは、次の方法で更新できます。

  • Google Cloud コンソールを使用する
  • bq コマンドライン ツールの bq update コマンドの使用
  • tables.patch API メソッドを呼び出す
  • クライアント ライブラリの使用

SQL 言語は、API または bq コマンドライン ツールでレガシー SQL から GoogleSQL に変更できます。Google Cloud コンソールでは、レガシー SQL ビューを GoogleSQL にアップデートできません。

ビューの SQL クエリを更新するには:

Console

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

  2. [詳細] タブをクリックします。

  3. [クエリ] ボックスの上の、[クエリを編集] ボタンをクリックします。表示されたダイアログの [開く] をクリックします。

    クエリを編集

  4. [クエリエディタ] ボックスで SQL クエリを編集し、[ビューを保存] をクリックします。

    ビューを保存

  5. [ビューを保存] ダイアログですべてのフィールドが正しいことを確認してから、[保存] をクリックします。

bq

--view フラグを指定して bq update コマンドを発行します。GoogleSQL を使用するか、クエリ言語をレガシー SQL から GoogleSQL に更新するには、--use_legacy_sql フラグを指定し、false に設定します。

Cloud Storage またはローカル ファイルに格納されている外部のユーザー定義関数リソースをクエリで参照する場合は、--view_udf_resource フラグを使用してリソースを指定します。--view_udf_resource フラグはここでは説明しません。UDF を使用する詳細については、GoogleSQL ユーザー定義関数をご覧ください。

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

bq update \
    --use_legacy_sql=false \
    --view_udf_resource=path_to_file \
    --view='query' \
    project_id:dataset.view

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

  • path_to_file: ビューで使用されるユーザー定義関数リソースとして読み込まれ、すぐに評価されるコードファイルの URI またはローカル ファイル システムのパスです。複数のファイルを指定するには、フラグを繰り返します。
  • query: 有効な GoogleSQL クエリ
  • project_id: プロジェクト ID
  • dataset: 更新するビューを含むデータセットの名前
  • view: 更新するビューの名前

次のコマンドを入力して、mydatasetmyview という名前のビューの SQL クエリを更新します。mydataset はデフォルト プロジェクトにあります。ビューを更新するために使用されるクエリの例では、USA Name Data 一般公開データセットのデータをクエリします。

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    mydataset.myview

次のコマンドを入力して、mydatasetmyview という名前のビューの SQL クエリを更新します。mydataset はデフォルト プロジェクトではなく myotherproject にあります。ビューを更新するために使用されるクエリの例では、USA Name Data パブリック データセットのデータをクエリします。

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    myotherproject:mydataset.myview

API

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

Go

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

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

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateView demonstrates updating the query metadata that defines a logical view.
func updateView(projectID, datasetID, viewID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// viewID := "myview"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	view := client.Dataset(datasetID).Table(viewID)
	meta, err := view.Metadata(ctx)
	if err != nil {
		return err
	}

	newMeta := bigquery.TableMetadataToUpdate{
		// This example updates a view into the shakespeare dataset to exclude works named after kings.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus NOT LIKE '%king%'",
	}

	if _, err := view.Update(ctx, newMeta, 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.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to update query on a view
public class UpdateViewQuery {

  public static void runUpdateViewQuery() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String updateQuery =
        String.format("SELECT TimestampField, StringField FROM %s.%s", datasetName, tableName);
    updateViewQuery(datasetName, viewName, updateQuery);
  }

  public static void updateViewQuery(String datasetName, String viewName, String query) {
    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();

      // Retrieve existing view metadata
      TableInfo viewMetadata = bigquery.getTable(TableId.of(datasetName, viewName));

      // Update view query
      ViewDefinition viewDefinition = viewMetadata.getDefinition();
      viewDefinition.toBuilder().setQuery(query).build();

      // Set metadata
      bigquery.update(viewMetadata.toBuilder().setDefinition(viewDefinition).build());

      System.out.println("View query updated successfully");
    } catch (BigQueryException e) {
      System.out.println("View query was not updated. \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 updateViewQuery() {
  // Updates a view named "my_existing_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_existing_dataset"
  // const tableId = "my_existing_table"
  const dataset = await bigquery.dataset(datasetId);

  // This example updates a view into the USA names dataset to include state.
  const newViewQuery = `SELECT name, state 
  FROM \`bigquery-public-data.usa_names.usa_1910_current\`
  LIMIT 10`;

  // Retrieve existing view
  const [view] = await dataset.table(tableId).get();

  // Retrieve existing view metadata
  const [metadata] = await view.getMetadata();

  // Update view query
  metadata.view = newViewQuery;

  // Set metadata
  await view.setMetadata(metadata);

  console.log(`View ${tableId} updated.`);
}

Python

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

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

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'M'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'M%'"

# Make an API request to update the query property of the view.
view = client.update_table(view, ["view_query"])
print(f"Updated {view.table_type}: {str(view.reference)}")

ビューの有効期限の更新

デフォルトのテーブル有効期限をデータセット レベルで設定することも(テーブルとビューの両方に反映される)、ビューを作成するときにそのビューの有効期限を設定することもできます。ビューを作成するときに有効期限を設定すると、データセットのデフォルトのテーブル有効期限は無視されます。デフォルトのテーブル有効期限をデータセット レベルで設定せず、ビューの作成時にも有効期限を設定しなかった場合は、ビューが失効することはないので、ビューを手動で削除する必要があります。

ビューを作成した後、次の方法でビューの有効期限を更新できます。

  • Google Cloud コンソールを使用する
  • GoogleSQL 構文で記述されたデータ定義言語(DDL)ステートメントを使用する
  • bq コマンドライン ツールの bq update コマンドを使用する
  • tables.patch API メソッドを呼び出す
  • クライアント ライブラリを使用する

ビューの有効期限を更新するには:

Console

  1. ナビゲーション パネルで、ビューを選択します。

  2. [詳細を表示] ページで、[詳細] タブをクリックします。

  3. [ビューの情報] の右側にある編集アイコン(鉛筆)をクリックします。

  4. [ビューの情報] ダイアログの [有効期限の表示] で、[日付を指定] をクリックします。

  5. 日付ピッカーで有効期限の日付と時刻を入力し、[OK] をクリックします。

  6. [更新] をクリックします。更新された有効期限が [ビュー情報] セクションに表示されます。

SQL

ALTER VIEW SET OPTIONS DDL ステートメントを使用します。

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

    BigQuery に移動

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

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      expiration_timestamp = TIMESTAMP('NEW_TIMESTAMP'));

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

    • DATASET_ID: ビューを含むデータセットの ID
    • MY_VIEW: 更新するビューの名前
    • NEW_TIMESTAMP: タイムスタンプ値

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

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

bq

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

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

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

  • integer: テーブルのデフォルトの存続期間(秒)です。最小値は 3,600 秒(1 時間)です。現在時刻にこの整数値を足した値が有効期限になります。
  • project_id: プロジェクト ID
  • dataset: 更新するビューを含むデータセットの名前
  • view: 更新するビューの名前

次のコマンドを入力して、mydataset 内の myview のパーティションの有効期限を 5 日間(432,000 秒)に更新します。mydataset はデフォルト プロジェクトにあります。

bq update \
    --expiration 432000 \
    mydataset.myview

次のコマンドを入力して、mydataset 内の myview のパーティションの有効期限を 5 日間(432,000 秒)に更新します。mydataset はデフォルト プロジェクトではなく myotherproject にあります。

bq update \
    --expiration 432000 \
    myotherproject:mydataset.myview

API

tables.patch メソッドを呼び出し、テーブル リソースexpirationTime プロパティを使用します。tables.update メソッドはテーブル リソース全体を置き換えるため、tables.patch メソッドの方が適切です。REST API を使用する場合、ビューの有効期限はミリ秒単位で表されます。

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

Table beforeTable = bigquery.getTable(datasetName, tableName);

// Set table to expire 5 days from now.
long expirationMillis = DateTime.now().plusDays(5).getMillis();
TableInfo tableInfo = beforeTable.toBuilder()
        .setExpirationTime(expirationMillis)
        .build();
Table afterTable = bigquery.update(tableInfo);

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

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 = 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}.")

ビューの説明の更新

ビューの説明は次の方法で更新できます。

  • Google Cloud コンソールを使用する
  • GoogleSQL 構文で記述されたデータ定義言語(DDL)ステートメントを使用する
  • bq コマンドライン ツールの bq update コマンドを使用する
  • tables.patch API メソッドを呼び出す
  • クライアント ライブラリを使用する

ビューの説明を更新するには:

コンソール

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

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

  2. [詳細] タブをクリックします。

  3. [説明] の横にある鉛筆アイコンをクリックします。

    ビューの説明の編集

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

SQL

ALTER VIEW SET OPTIONS DDL ステートメントを使用します。

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

    BigQuery に移動

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

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      description = 'NEW_DESCRIPTION');

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

    • DATASET_ID: ビューを含むデータセットの ID
    • MY_VIEW: 更新するビューの名前
    • NEW_DESCRIPTION: 新しいビューの説明

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

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

bq

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

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

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

  • description: 引用符で囲んだ、ビューを説明するテキストです
  • project_id: プロジェクト ID。
  • dataset: 更新するビューを含むデータセットの名前
  • view: 更新するビューの名前

次のコマンドを入力して、mydatasetmyview の説明を「Description of myview」に変更します。mydataset はデフォルト プロジェクトにあります。

bq update \
    --description "Description of myview" \
    mydataset.myview

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

bq update \
    --description "Description of myview" \
    myotherproject:mydataset.myview

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

// String datasetName = "my_dataset_name";
// String tableName = "my_table_name";
// String newDescription = "new_description";

Table beforeTable = bigquery.getTable(datasetName, tableName);
TableInfo tableInfo = beforeTable.toBuilder()
    .setDescription(newDescription)
    .build();
Table afterTable = bigquery.update(tableInfo);

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 updateTableDescription() {
  // Updates a table's description.

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table description
  const description = 'New table description.';
  metadata.description = description;
  const [apiResponse] = await table.setMetadata(metadata);
  const newDescription = apiResponse.description;

  console.log(`${tableId} description: ${newDescription}`);
}

Python

ビューの説明の更新は、テーブルの説明の更新と同じプロセスです。

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

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

# 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."

ビューをコピーする

ビューは Google Cloud コンソールを使用してコピーできます。

bq コマンドライン ツール、REST API、クライアント ライブラリを使用してビューをコピーすることはできませんが、ターゲット データセット内のビューをコピーすることはできます。

必要な権限

Google Cloud コンソールでビューをコピーするには、コピー元データセットとコピー先データセットに対する IAM 権限が必要です。

  • コピー元データセットでは、次のものが必要です。

    • bigquery.tables.get
    • bigquery.tables.getData(ビューの SQL クエリによって参照されるテーブルにアクセスするために必要です)
  • コピー先データセットでは、次のものが必要です。

    • bigquery.tables.create(宛先データセット内にビューのコピーを作成できます)

次の IAM 事前定義ロールには、ビューのコピーに必要な権限が含まれています。

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

また、bigquery.datasets.create 権限がある場合は、作成したデータセットにビューをコピーできます。コピー先データセットを作成しない限り、コピー先データセットにもアクセスする必要もあります。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

ビューをコピーする

ビューをコピーするには:

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

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

  3. [ビューのコピー] ダイアログで、次の操作を行います。

    • [ソース] セクションで、プロジェクト名データセット名テーブル名が正しいことを確認します。
    • [送信先] セクションで、次の操作を行います。

      • [プロジェクト名] で、ビューのコピー先のプロジェクトを選択します。
      • [データセット名] で、コピーしたビューを格納するデータセットを選択します。
      • [テーブル名] に、ビューの名前を入力します。ボックスに新しいビューの名前を入力して、ビューの名前を変更できます。新しい名前を入力する場合は、ビューの命名規則に従う必要があります。

      [ビューのコピー] ダイアログ

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

コピージョブの上限が適用されます。詳細については、割り当てと上限をご覧ください。

ビューの名前を変更する

現在、ビューの名前の変更は、Google Cloud コンソールを使用してビューをコピーした場合のみ行えます。ビューをコピーするときに名前を変更する方法については、ビューのコピーをご覧ください。

bq コマンドライン ツール、API、クライアント ライブラリを使用して、既存のビューの名前を変更できません。代わりに、新しい名前でビューを再作成する必要があります。

ビューの削除

ビューを削除する方法は次のとおりです。

  • Google Cloud コンソールを使用する
  • bq コマンドライン ツールの bq rm コマンドを使用する
  • tables.delete API メソッドを呼び出す

現在利用可能なメソッドでは、一度に 1 つのビューしか削除できません。

指定した期間の経過後にビューが自動的に削除されるようにするには、データセット レベルでデフォルトの有効期限を設定するか、ビューを作成するときに有効期限を設定します。

承認済みビューを削除した場合、ソース データセットの承認済みビューリストから削除されたビューを削除するまで最大 24 時間かかることがあります。

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

必要な権限

ビューを削除するには、次の IAM 権限が必要です。

  • bigquery.tables.delete

次の IAM 事前定義ロールには、ビューを削除するために必要な権限が含まれています。

  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

bigquery.datasets.create 権限がある場合は、作成したデータセットにビューを削除できます。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

ビューを削除する

ビューを削除する方法は次のとおりです。

コンソール

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

    BigQuery に移動

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

  3. 詳細パネルで [ビューを削除] をクリックします。

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

SQL

DROP VIEW DDL ステートメントを使用します。

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

    BigQuery に移動

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

    DROP VIEW mydataset.myview;

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

    • DATASET_ID: ビューを含むデータセットの ID
    • MY_VIEW: 更新するビューの名前
    • NEW_DESCRIPTION: 新しいビューの説明

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

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

bq

bq rm コマンドに --table フラグ(または -t ショートカット)を指定して実行して、ビューを削除します。bq コマンドライン ツールを使用してビューを削除する場合は、アクションを確認する必要があります。--forceフラグ(または -f ショートカット)を使用して確認をスキップできます。

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

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

ここで

  • project_id は、プロジェクト ID です。
  • dataset は、テーブルを含むデータセットの名前です。
  • view は、削除するビューの名前です。

例:

bq コマンドの実行には、bq コマンドライン ツールを使用します。

Google Cloud コンソールで、[Cloud Shell] をアクティブにします。

Cloud Shell をアクティブにする

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

bq rm -t mydataset.myview

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

bq rm -t myotherproject:mydataset.myview

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

bq rm -f -t mydataset.myview

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

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

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 でビューへのアクセスを制御するには、承認済みビューをご覧ください。

次のステップ