ビューを作成する

このドキュメントでは、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 構文に自動的に更新することはできません。ビューの定義に使用されているクエリを変更するには、GCP Console の [クエリを編集] オプション、従来の BigQuery ウェブ UI の [Edit query] オプション、bq update --view CLI コマンド、クライアント ライブラリ、API メソッドの update または patch を使用します。
  • ビューを定義する SQL クエリにユーザー定義の関数を含めることはできません。
  • ワイルドカード テーブルクエリでビューを参照することはできません。

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

必要な権限

ビューは BigQuery でテーブル リソースとして扱われるため、ビューを作成するにはテーブルの作成と同じ権限が必要です。ビューを作成するユーザーには、少なくとも bigquery.tables.create 権限が付与されている必要があります。bigquery.tables.create 権限は、事前定義された以下の Cloud IAM 役割に含まれています。

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

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

BigQuery での Cloud IAM 役割と権限については、事前定義された役割と権限をご覧ください。

ビューの作成

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

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

ビューを作成するには:

Console

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

    ビューを保存

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

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

従来の UI

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

    ビューを保存

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

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

CLI

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