ビューの作成
このドキュメントでは、BigQuery でビューを作成する方法について説明します。
BigQuery では、次の方法でビューを作成できます。
- Google Cloud コンソールを使用する。
- bq コマンドライン ツールの
bq mk
コマンドを使用する。 tables.insert
API メソッドを呼び出す。- クライアント ライブラリを使用する。
CREATE VIEW
データ定義言語(DDL)ステートメントを送信する。
ビューの制限
BigQuery ビューには次の制限があります。
- ビューは読み取り専用です。 たとえば、データを挿入、更新、削除するクエリは実行できません。
- ビューを含むデータセットと、そのビューによって参照されているテーブルを含むデータセットは、同じロケーションに存在する必要があります。
- ビュー内の参照は、データセットで修飾する必要があります。デフォルトのデータセットはビューの本文に影響しません。
TableDataList
JSON API メソッドを使用してビューからデータを取得することはできません。詳細については、Tabledata: list をご覧ください。- ビューを使用するときは、GoogleSQL クエリとレガシー SQL クエリを併用できません。GoogleSQL クエリは、レガシー SQL 構文を使用して定義したビューを参照できません。
- ビューでクエリ パラメータを参照することはできません。
- ビューを作成すると、元のテーブルのスキーマがビューと一緒に保存されます。ビューの作成後に列を追加、削除、または変更しても、ビューは自動的に更新されません。ビューの SQL 定義が変更されるか、ビューが再作成されるまで、報告されるスキーマは不正確なままになります。報告されるスキーマが正確でない場合でも、送信されたクエリは正しい結果を出力します。
- レガシー SQL ビューを GoogleSQL 構文に自動的に更新することはできません。ビューの定義に使用されるクエリを変更するには、次を使用できます。
- Google Cloud コンソールの [クエリの編集] オプション
- bq コマンドライン ツールの
bq update --view
コマンド - BigQuery クライアント ライブラリ
- update API メソッドまたは patch API メソッド。
- ビューを定義する SQL クエリに一時的なユーザー定義関数と、一時テーブルを含めることはできません。
- ワイルドカード テーブル クエリでビューを参照することはできません。
ビューに適用される割り当てと上限については、ビューの上限をご覧ください。
始める前に
このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。
必要な権限
BigQuery では、ビューはテーブル リソースとして扱われます。このため、ビューを作成するには、テーブルの作成と同じ権限が必要になります。また、ビューの SQL クエリで参照されるテーブルにクエリを実行する権限も必要です。
ビューを作成するには、bigquery.tables.create
IAM 権限が必要です。事前定義された IAM ロールの roles/bigquery.dataEditor
には、ビューの作成に必要な権限が含まれています。
また、bigquery.datasets.create
権限がある場合は、作成したデータセットにビューを作成できます。所有していないデータのビューを作成するには、そのテーブルに対する bigquery.tables.getData
権限が必要です。
BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。
ビューの命名
BigQuery でビューを作成する場合、ビュー名はデータセットごとに一意にする必要があります。ビュー名には次の制限があります。
- UTF-8 バイトの文字を合計で 1,024 バイト以下にする。
- カテゴリ L(文字)、M(マーク)、N(数字)、Pc(コネクタ、アンダースコアを含む)、Pd(ダッシュ)、Zs(スペース)の Unicode 文字を含む。詳しくは、一般カテゴリをご覧ください。
有効なビュー名の例: view 01
、ग्राहक
、00_お客様
、étudiant-01
。
注意点:
- テーブル名では、デフォルトで大文字と小文字を区別します。
mytable
とMyTable
は、大文字と小文字の区別が無効なデータセットの一部でない限り、同じデータセット内に共存できます。 - 一部のビュー名とビュー名の接頭辞は予約されています。ビュー名または接頭辞が予約されているというエラーが表示された場合は、別の名前を選択して、もう一度試してください。
複数のドット演算子(
.
)を連続して含めると、重複する演算子が暗黙的に削除されます。たとえば、以下は、
project_name....dataset_name..table_name
次のようになります。
project_name.dataset_name.table_name
ビューを作成する
ビューを作成するには、ビューにアクセス可能なデータを定義する SQL クエリを作成します。SQL クエリは、SELECT
ステートメントで構成する必要があります。他のステートメント タイプ(DML ステートメントなど)とマルチステートメント クエリはビュークエリでは使用できません。
ビューを作成するには:
Console
クエリを実行した後、クエリ結果ウィンドウの上にある [ビューを保存] ボタンをクリックして、クエリをビューとして保存します。
[ビューの保存] ダイアログで、次の操作を行います。
- [プロジェクト名] で、ビューを保存するプロジェクトを選択します。
- [データセット名] で、ビューを保存するデータセットを選択します。ビューを含むデータセットと、そのビューによって参照されているテーブルを含むデータセットは、同じロケーションに存在する必要があります。
- [テーブル名] に、ビューの名前を入力します。
- [保存] をクリックします。
SQL
CREATE VIEW
ステートメントを使用します。
次のステートメントでは、米国の名前の一般公開データセットから usa_male_names
という名前のビューを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE VIEW mydataset.usa_male_names(name, number) AS ( SELECT name, number FROM
bigquery-public-data.usa_names.usa_1910_current
WHERE gender = 'M' ORDER BY number DESC );[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
--view
フラグを指定して bq mk
コマンドを使用します。GoogleSQL クエリの場合は、--use_legacy_sql
フラグを追加して false
に設定します。オプション パラメータには --add_tags
、--expiration
、--description
、--label
などがあります。パラメータの一覧については、bq mk
コマンド リファレンスをご覧ください。
Cloud Storage またはローカル ファイルに格納されている外部のユーザー定義関数(UDF)リソースをクエリで参照する場合は、--view_udf_resource
フラグを使用してリソースを指定します。--view_udf_resource
フラグはここでは説明しません。UDF の使用方法については、UDF をご覧ください。
デフォルト プロジェクト以外のプロジェクトにビューを作成する場合は、--project_id
フラグを使用してプロジェクト ID を指定します。
bq mk \ --use_legacy_sql=false \ --view_udf_resource=PATH_TO_FILE \ --expiration=INTEGER \ --description="DESCRIPTION" \ --label=KEY_1:VALUE_1 \ --add_tags=KEY_2:VALUE_2[,...] \ --view='QUERY' \ --project_id=PROJECT_ID \ DATASET.VIEW
次のように置き換えます。
PATH_TO_FILE
は、ビューで使用される UDF リソースとして読み込まれ、すぐに評価されるコードファイルの URI またはローカル ファイル システムのパスです。複数のファイルを指定するには、フラグを繰り返します。INTEGER
は、ビューの存続期間(秒)を設定します。INTEGER
が0
の場合、ビューに期限切れはありません。--expiration
フラグを省略した場合、BigQuery はビューを作成し、データセットのデフォルトのテーブル存続期間を設定します。DESCRIPTION
はビューの説明であり、引用符で囲みます。KEY_1:VALUE_1
は、ラベルを表す Key-Value ペアです。複数のラベルを指定するには、--label
フラグを繰り返します。KEY_2:VALUE_2
は、タグを表す Key-Value ペアです。同じフラグで、各 Key-Value ペアをカンマで区切って複数のタグを追加できます。QUERY
は有効なクエリです。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
という名前のビューを作成します。説明は This is my view
、ラベルは organization:development
に設定されます。ビューの有効期限は、データセットのデフォルトのテーブル有効期限に設定されます。ビューの作成に使用されるクエリは、USA Name データ一般公開データセットのデータを照会します。
bq mk \
--use_legacy_sql=false \
--description "This is my view" \
--label organization:development \
--project_id myotherproject \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC' \
mydataset.myview
ビューを作成した後、ビューの有効期限、説明、ラベルを更新できます。詳細については、ビューの更新をご覧ください。
Terraform
google_bigquery_table
リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、myview
という名前のビューが作成されます。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
terraform init
必要に応じて、最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行し、プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」のメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
API
view
プロパティを含むテーブル リソースを使用して、tables.insert
メソッドを呼び出します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
ビューを作成したら、テーブルと同じ方法でビューにクエリを実行します。
ビューのセキュリティ
BigQuery でビューへのアクセスを制御するには、承認済みビューをご覧ください。
次のステップ
- 承認済みビューの作成方法については、承認済みビューの作成をご覧ください。
- ビューのメタデータを取得する方法については、ビューの情報の取得をご覧ください。
- ビューの管理の詳細については、ビューの管理をご覧ください。