ビューの作成

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

BigQuery では、以下の方法でビューを作成できます。

  • GCP Console または従来の BigQuery ウェブ UI
  • コマンドライン ツールの bq mk コマンド
  • tables.insert API メソッドの呼び出し
  • CREATE VIEW データ定義言語(DDL)ステートメントの送信

ビューの命名

BigQuery でビューを作成する場合、ビュー名はデータセットごとに一意にする必要があります。ビュー名には次の制限があります。

  • 1,024 文字以内
  • 英字(大文字または小文字)、数字、アンダースコアだけが含まれている

ビューの制限

BigQuery ビューには次の制限があります。

  • ビューが含まれるデータセットと、そのビューで参照されるテーブルが属するデータセットは、同じロケーションに存在する必要があります。
  • ビューからデータをエクスポートする BigQuery ジョブは実行できません。
  • TableDataList JSON API メソッドを使用してビューからデータを取得することはできません。詳細については、Tabledata: list をご覧ください。
  • ビューを使用するときは、標準 SQL クエリとレガシー SQL クエリを併用できません。標準 SQL クエリでは、レガシー SQL 構文で定義したビューを参照できません。
  • ビューを作成すると、元のテーブルのスキーマがビューと一緒に保存されます。ビューの作成後に列の追加や削除などを行うと、ビューを更新するまでは正確なスキーマが報告されません。報告されるスキーマが正確でない場合でも、送信されたクエリは正しい結果を出力します。
  • レガシー SQL ビューを標準 SQL に自動的にアップデートすることはできません。ビューの定義に使用されているクエリを変更するには、Console か従来の BigQuery ウェブ UI の [Edit query] オプション、CLI の bq update --view コマンド、API メソッドの update または patch を使用します。
  • ビューを定義する SQL クエリにユーザー定義の関数を含めることはできません。
  • ワイルドカード テーブルクエリでビューを参照することはできません。

ビューに適用される割り当てと制限については、ビューの制限をご覧ください。

必要な権限

ビューは BigQuery でテーブル リソースとして扱われるため、ビューを作成するにはテーブルの作成と同じ権限が必要です。ビューを作成するには、データセット レベルで WRITER アクセス権が付与されているか、bigquery.tables.create 権限を含むプロジェクト レベルの IAM 役割が割り当てられている必要があります。次の事前定義済みのプロジェクト レベルの IAM 役割には bigquery.tables.create 権限が含まれます。

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

BigQuery での IAM 役割と権限の詳細については、アクセス制御をご覧ください。データセット レベルの役割の詳細については、データセットに対する基本の役割をご覧ください。

ビューの作成

ビューを作成するには、ビューにアクセス可能なデータを定義する SQL クエリを作成します。

ビューの作成に使用する標準 SQL クエリで、テーブルとビューの参照に、プロジェクト ID を `[PROJECT_ID].[DATASET].[TABLE]` の形式で含める必要があります。標準 SQL では、異なるプロジェクトからビューがクエリされたときのあいまいさを避けるため、明示的なプロジェクト ID が必要です。

ビューを作成するには、次の操作を行います。

Console

  1. クエリを実行した後、クエリ結果ウィンドウの上にある [ビューを保存] ボタンをクリックして、クエリをビューとして保存します。

    ビューを保存

  2. [ビューの保存] ダイアログで、次の操作を行います。

    • [プロジェクト名] で、ビューを保存するプロジェクトを選択します。
    • [データセット名] で、ビューを含むデータセットを選択します。ビューを含むデータセットと、そのビューによって参照されているテーブルを含むデータセットは、同じロケーションに存在する必要があります。
    • [テーブル名] に、ビューの名前を入力します。
    • [保存] をクリックします。

従来の UI

  1. クエリを実行した後、クエリ結果ウィンドウの [Save View] ボタンをクリックし、結果をビューとして保存します。

    ビューを保存

  2. [Save View] ダイアログで、次の操作を行います。

    • [Project] で、ビューを保存するプロジェクトを選択します。
    • [Dataset] で、ビューを格納するデータセットを選択します。ビューを含むデータセットと、そのビューによって参照されているテーブルを含むデータセットは、同じロケーションに存在する必要があります。
    • [Table ID] に、ビューの名前を入力します。

      [Save View] ダイアログ

    • [OK] をクリックします。

コマンドライン

mk コマンドを使用して --view フラグを指定します。標準 SQL クエリを使用する場合は、--use_legacy_sql フラグを追加して false に設定します。オプションのパラメータには --expiration--description--label があります。

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

デフォルト プロジェクト以外のプロジェクトにビューを作成する場合は、--project_id フラグを使用してプロジェクト ID を指定します。

bq mk --use_legacy_sql=false --view_udf_resource=[PATH_TO_FILE] --expiration [INTEGER] --description "[DESCRIPTION]" --label [KEY:VALUE, KEY:VALUE] --view '[QUERY]' --project_id [PROJECT_ID] [DATASET].[VIEW]

ここで

  • [PATH_TO_FILE] は、ビューで使用されるユーザー定義関数リソースとして読み込まれ、すぐに評価されるコードファイルの URI またはローカル ファイル システムのパスです。フラグを繰り返して複数のファイルを指定します。
  • [INTEGER] は、ビューのデフォルトの存続期間(秒)です。最小値は 3,600 秒(1 時間)です。現在時刻にこの整数値を足した値が有効期限になります。ビューの作成時に有効期限を設定した場合、データセットのデフォルトのテーブル有効期限設定は無視されます。
  • [DESCRIPTION] はビューの説明であり、引用符で囲みます。
  • [KEY:VALUE] は、ラベルを表す Key-Value ペアです。カンマ区切りリストを使用して複数のラベルを入力できます。
  • [QUERY] は有効なクエリです。標準 SQL ビューのクエリでは、テーブルとビューの参照に、プロジェクト ID を `[PROJECT_ID].[DATASET].[TABLE]` の形式で含める必要があります。
  • [PROJECT_ID] はプロジェクト ID です(デフォルトのプロジェクトが構成されていない場合)。
  • [DATASET] は、プロジェクトのデータセットです。
  • [VIEW] は、作成するビューの名前です。

例:

デフォルト プロジェクトにある mydataset 内に myview という名前のビューを作成するには、次のコマンドを入力します。存続期間は 3,600 秒(1 時間)、説明は This is my view、ラベルは organization:development に設定されます。ビューの作成に使用されるクエリは、USA Name データ一般公開データセットのデータを照会します。

bq mk --use_legacy_sql=false --expiration 3600 --description "This is my view" --label organization:development --view 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC' mydataset.myview

myotherproject にある mydataset 内に myview という名前のビューを作成するには、次のコマンドを入力します。存続期間は 3,600 秒(1 時間)、説明は This is my view、ラベルは organization:development に設定されます。ビューの作成に使用されるクエリは、USA Name データ一般公開データセットのデータを照会します。

bq mk --use_legacy_sql=false --expiration 3600 --description "This is my view" --label organization:development --view 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC' --project_id myotherproject mydataset.myview

ビューを作成した後、ビューの有効期限説明ラベルを更新できます。

API

view プロパティを含むテーブル リソースを指定して、tables.insert メソッドを呼び出します。

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")
meta := &bigquery.TableMetadata{
	// This example shows how to create a view of the shakespeare sample dataset, which
	// provides word frequency information.  This view restricts the results to only contain
	// results for works that contain the "king" in the title, e.g. King Lear, King Henry V, etc.
	ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus LIKE '%king%'",
}
if err := client.Dataset(datasetID).Table(tableID).Create(ctx, meta); 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 create a shared view of a source table of
# US States. The source table contains all 50 states, while the view will
# contain only states with names starting with 'W'.
view_ref = shared_dataset_ref.table("my_shared_view")
view = bigquery.Table(view_ref)
sql_template = 'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "W%"'
view.view_query = sql_template.format(project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

print("Successfully created view at {}".format(view.full_table_id))

ビューを作成したら、テーブルと同じ方法でビューにクエリを実行します。

次のステップ

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

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

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