ビューのプロパティの更新

このドキュメントでは、BigQuery のビュー プロパティを更新する方法について説明します。ビューを作成したら、次のビュー プロパティを更新できます。

必要な権限

ビューを更新するには、テーブルの更新と同じ権限が必要です。データセット レベルで WRITER アクセス権が割り当てられているか、bigquery.tables.update 権限を含むプロジェクト レベルの IAM 役割が割り当てられている必要があります。次の事前定義されたプロジェクト レベルの IAM 役割には、bigquery.tables.update 権限が含まれています。

これに加えて、bigquery.user 役割には bigquery.datasets.create 権限が含まれていることから、bigquery.user 役割が割り当てられたユーザーは、そのユーザーがデータセット内に作成したどのビューも更新することができます。bigquery.user 役割に割り当てられているユーザーがデータセットを作成すると、そのユーザーにはそのデータセットへの OWNER アクセス権が付与されます。データセットへの OWNER アクセス権が付与されたユーザーは、そのデータセットと、そこに含まれるすべてのテーブルとビューを完全に制御できます。

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

ビューの SQL クエリの更新

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

  • GCP Console または従来の BigQuery ウェブ UI
  • コマンドライン ツールの bq update コマンド
  • tables.patch API メソッドの呼び出し

CLI または API を使用して、SQL 言語を従来の SQL から標準 SQL に変更できます。GCP Console または従来の BigQuery ウェブ UI では、従来の SQL ビューを標準 SQL に更新することはできません。

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

従来の UI

  1. ビューを選択します。

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

  3. [Query] ボックスで [Edit Query] をクリックします。

  4. [Query] ボックスで SQL クエリを編集して、[Save View] をクリックします。

    ビューを更新する

コマンドライン

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

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

デフォルト プロジェクト以外のプロジェクトでビューを更新する場合は、[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] は、有効な標準 SQL クエリです。
  • [PROJECT_ID] はプロジェクト ID です。
  • [DATASET] はビューを含むデータセットです。
  • [VIEW] は、更新するビューの名前です。

例:

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

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

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

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

// 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")
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
}

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# project = 'my-project'
# source_dataset_id = 'my_source_dataset'
# source_table_id = 'us_states'
# shared_dataset_ref = client.dataset('my_shared_dataset')

# This example shows how to update a shared view of a source table of
# US States. The view's query will be updated to contain only states with
# names starting with 'M'.
view_ref = shared_dataset_ref.table('my_shared_view')
view = bigquery.Table(view_ref)
sql_template = (
    'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "M%"')
view.view_query = sql_template.format(
    project, source_dataset_id, source_table_id)
view = client.update_table(view, ['view_query'])  # API request

ビューの有効期限の更新

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

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

  • 従来の BigQuery ウェブ UI
    • 現在、GCP Console でビューの有効期限を変更できません。
  • CLI の bq update コマンド
  • tables.patch API メソッドの呼び出し

ビューの有効期限を更新するときは、ビューの作成日時に基づいてビューの有効期限を計算する必要があります。たとえば、ビューが作成されたのが 2018 年 1 月 3 日で今日が 1 月 5 日の場合に、BigQuery ウェブ UI を使用して有効期限を 1 日と設定すると、有効期限は「過去」とみなされてビューが即座に削除されます。

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

従来の UI

ウェブ UI を使用してビューを作成する場合、有効期限を追加することはできません。ビューを作成した後、[View Details] ページで有効期限を追加または更新できます。

  1. ナビゲーション ペインで、ビューを選択します。

  2. [View Details] ページで、[Details] をクリックします。

  3. [Expiration Time] の [Edit] をクリックします。

  4. [Update Expiration] ダイアログで、[In] をクリックし、有効期限を日数として入力します。

  5. [OK] をクリックします。更新された有効期限が [Details] ページに表示されます。

    有効期限を表示する

コマンドライン

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

bq update --expiration [INTEGER] [PROJECT_ID]:[DATASET].[VIEW]

ここで:

  • [INTEGER] はテーブルのデフォルトの存続期間(秒)です。最小値は 3,600 秒(1 時間)です。現在時刻にこの整数値を足した値が有効期限になります。
  • [PROJECT_ID] はプロジェクト ID です。
  • [DATASET] は、更新するビューが存在しているデータセットの名前です。
  • [VIEW] は更新するビューの名前です。

例:

次のコマンドを入力すると、mydataset にある myview の有効期限が 5 日(43200 秒)に更新されます。mydataset はデフォルトのプロジェクトにあります。

bq update --expiration 432000 mydataset.myview

次のコマンドを入力すると、mydataset にある myview の有効期限が 5 日(43200 秒)に更新されます。mydataset はデフォルトのプロジェクトではなく myotherproject にあります。

bq update --expiration 432000 myotherproject:mydataset.myview

API

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

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

Python

ビューの有効期限の更新は、テーブルの有効期限の更新と同じプロセスです。

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

import datetime
import pytz

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.expires is None

# set table to expire 5 days from now
expiration = datetime.datetime.now(pytz.utc) + datetime.timedelta(days=5)
table.expires = expiration
table = client.update_table(table, ['expires'])  # API request

# expiration is stored in milliseconds
margin = datetime.timedelta(microseconds=1000)
assert expiration - margin <= table.expires <= expiration + margin

ビューの説明の更新

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

  • GCP Console または従来の BigQuery ウェブ UI
  • bq update CLI コマンド
  • tables.patch API メソッドの呼び出し

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

従来の UI

BigQuery ウェブ UI を使用してビューを作成する際に説明を追加することはできません。ビューが作成されたら、[View Details] ページで説明を追加できます。

  1. ナビゲーション ペインで、ビューを選択します。

  2. [View Details] ページで、[Details] をクリックします。

  3. [Description] セクションで、[View Details] をクリックして、説明ボックスを開きます。

  4. ボックスに説明を入力します。ボックスの外側をクリックすると、テキストが保存されます。

    テーブルの説明

コマンドライン

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

bq update --description "[DESCRIPTION]" [PROJECT_ID]:[DATASET].[VIEW]

ここで:

  • [DESCRIPTION] は引用符で囲んだ、ビューを説明するテキストです。
  • [PROJECT_ID] はプロジェクト ID です。
  • [DATASET] は、更新するビューが存在しているデータセットの名前です。
  • [VIEW] は更新するビューの名前です。

例:

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

// 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")
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
}

Java

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

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

// 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);

Python

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

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

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').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 のサポートページをご覧ください。