ビューの管理

このドキュメントでは、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: 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、クライアント ライブラリを使用してもコピーできません。代わりに、ターゲット データセットにビューを再作成する必要があります。ビューの再作成を容易にするため、bq コマンドライン ツールを使用してビューの SQL クエリをコピーできます。

必要な権限

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. [ビューのコピー] ダイアログで、次の操作を行います。

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

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

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

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

bq

bq コマンドライン ツールは、ビューのコピーをサポートしていません。代わりに、ターゲット データセットにビューを再作成する必要があります。ビューの再作成を簡単に行うために、ビューの定義に使用した SQL クエリをコピーできます。

ビューを定義する SQL クエリをコピーするには、bq show コマンドを発行します。--format フラグを使用して出力を制御できます。デフォルト以外のプロジェクトにあるビューの情報を取得する場合は、project_id:dataset の形式でプロジェクト ID をデータセットに追加します。ビューのプロパティをファイルに書き込むには、> path_to_file をコマンドに追加します。

bq show \
--format=prettyjson \
project_id:dataset.view > path_to_file

ここで

  • project_id はプロジェクト ID です。
  • dataset は、データセットの名前です。
  • view はビューの名前です。
  • path_to_file は、ローカルマシン上の出力ファイルへのパスです。

例:

次のコマンドを入力して、mydataset にある myview に関する情報を表示します。mydataset はデフォルト プロジェクトにあります。

bq show --format=prettyjson mydataset.myview

次のコマンドを入力して、mydataset にある myview に関する情報を表示します。mydataset はデフォルト プロジェクトではなく myotherproject にあります。ビューのプロパティは、ローカル ファイル /tmp/myview.json に書き込まれます。

bq show \
--format=prettyjson \
myotherproject:mydataset.myview > /tmp/myview.json

API

REST API は、ビューのコピーをサポートしていません。代わりに、ターゲット データセットにビューを再作成する必要があります。REST API を使用してビューを作成する方法については、ビューの作成をご覧ください。

ビューの名前を変更する

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

次のステップ