ビューの管理

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

ビューをコピーする

現在、ビューをコピーできるのは GCP Console を使用した場合のみです。

従来のウェブ UI、CLI、REST API、クライアント ライブラリを使用してもビューのコピーはできません。代わりに、ターゲット データセットにビューを再作成する必要があります。ビューの再作成を簡単に行うために、CLI または従来のウェブ UI を使用してビューの SQL クエリをコピーできます。

必要な権限

GCP Console でビューをコピーするには、少なくとも次の権限が付与されている必要があります。

コピー元データセットに対して:

  • bigquery.tables.get(ビューのメタデータをコピーするため)
  • bigquery.tables.getData(ビューの SQL クエリをコピーするため)

ビューの SQL クエリから参照されるテーブルにアクセスするには、bigquery.tables.getData などの権限が必要になる場合もあります。

コピー先データセットに対して:

  • bigquery.tables.create(宛先データセットにビューのコピーを作成するため)

bigquery.tables.createbigquery.tables.getbigquery.tables.getData の各権限は、次の事前定義された Cloud IAM 役割に含まれています。

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

また、bigquery.datasets.create 権限を持つユーザーがデータセットを作成すると、作成したデータセットに対する bigquery.dataOwner アクセス権がそのユーザーに付与されます。 bigquery.dataOwner アクセス権により、そのデータセットからビューをコピーすることはできますが、コピー先のデータセットについては、同じユーザーが作成した場合を除き、アクセス権を明示的に指定する必要があります。

BigQuery での Cloud IAM 役割と権限については、アクセス制御をご覧ください。

ビューのコピー

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

Console

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

  2. ウィンドウの右側で、[ビューをコピー] をクリックします。

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

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

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

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

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

従来の UI

従来のウェブ UI は、ビューのコピーをサポートしていません。代わりに、ターゲット データセットにビューを再作成する必要があります。ビューの再作成を簡単に行うために、ビューの定義に使用した SQL クエリをコピーできます。

ビューを定義する SQL クエリをコピーするには:

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

  2. [View Details] パネルで [Details] をクリックします。

  3. [Query] ボックスにテキストをコピーします。

CLI

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 に関するすべての情報を表示します。mydatasetmyotherproject にあり、デフォルトのプロジェクトにはありません。ビューのプロパティは、ローカル ファイル /tmp/myview.json に書き込まれます。

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

API

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

ビューの名前の変更

現在、ビューの名前を変更できるのは、GCP Console を使用してビューをコピーした場合のみです。ビューをコピーするときに名前を変更する方法については、ビューのコピーをご覧ください。

従来のウェブ UI、CLI、API、クライアント ライブラリを使用して既存のビューの名前は変更できません。代わりに、新しい名前でビューを再作成する必要があります。

ビューの削除

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

  • GCP Console または従来の BigQuery ウェブ UI
  • コマンドライン ツールの bq rm コマンドを使用する
  • tables.delete API メソッドを呼び出す

現時点では、利用可能なメソッドで削除できるビューは一度に 1 つだけです。

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

必要な権限

ビューを削除するには、少なくとも bigquery.tables.delete および bigquery.tables.get 権限が付与されている必要があります。bigquery.tables.delete および bigquery.tables.get 権限は、次の事前定義された Cloud IAM 役割に含まれています。

  • bigquery.dataOwner
  • bigquery.dataEditor
  • bigquery.admin

また、bigquery.datasets.create 権限があるユーザーがデータセットを作成すると、作成したデータセットに対する bigquery.dataOwner アクセス権がそのユーザーに付与されます。 bigquery.dataOwner アクセス権により、データセットに含まれるビューの削除が許可されます。

BigQuery での Cloud IAM 役割と権限については、アクセス制御をご覧ください。

ビューの削除

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

Console

  1. [Resources] パネルでビューを選択します。ウィンドウの右側にある [Delete view] をクリックします。

  2. ダイアログにビューの名前を入力し、[Delete] をクリックして確定します。

従来の UI

  1. ナビゲーション バーのビュー名の横にある下矢印アイコン 下矢印アイコン をクリックし、[Delete view] をクリックします。

  2. プロンプトが表示されたら、[OK] をクリックして確定します。

CLI

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

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

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

ここで

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

例:

次のコマンドを入力すると、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 のリファレンス ドキュメントをご覧ください。


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 のリファレンス ドキュメントをご覧ください。

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
table := client.Dataset(datasetID).Table(tableID)
if err := table.Delete(ctx); err != nil {
	return err
}

Java

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

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 のリファレンス ドキュメントをご覧ください。

// 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 のリファレンス ドキュメントをご覧ください。

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 のリファレンス ドキュメントをご覧ください。

from google.cloud import bigquery

# TODO(developer): 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)
print("Deleted table '{}'.".format(table_id))

Ruby

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

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。