ビューの管理

このドキュメントでは、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.create 権限、bigquery.tables.get 権限、bigquery.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. [クエリ] ボックスにテキストをコピーします。

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 に関する情報を表示します。mydataset はデフォルト プロジェクトではなく myotherproject にあります。ビューのプロパティは、ローカル ファイル /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. [リソース] パネルでビューを選択します。ウィンドウの右側にある [ビューを削除] をクリックします。

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

従来の 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 のサポートページをご覧ください。