BigQuery: ビュー作成実践

2020.03.17

下記エントリ群にて、Google BigQueryにおける「テーブル作成」の入門的な位置付けの実践を行ってきました。

多くのデータベースシステム同様、BigQueryでも上記の「テーブル」の他に「ビュー」を利用する事が可能となっています。当エントリでは「BigQueryのビュー」を幾つかの方法で作成してみたいと思います。

目次

 

BigQueryビュー概要

BigQueryにおける「ビュー」に関する情報は以下公式ドキュメントをご参照ください。レガシーSQLと標準SQLの双方を活用している場合であればそれらの関係性について、そのあたりが特に無ければワイルドカードに関する部分であったり、テーブルとビューが同じロケーションにあること等に留意しておくと良さそうです。また、テーブル同様にview_option_listを使うことでビューに任意の情報を付与する事が可能となっています。

 

BigQueryビュー作成実践

 

コンソール経由

まずは一番手っ取り早い「コンソール経由でのビュー作成」から。前もって用意しておいたデータ(Marvelのキャラクターに関する情報)を使い、『登場回数の多い順からTOP30件』のデータをクエリしてみました。

検索結果が表示された後、「ビューを保存」を押下。

ダイアログが表示されるので、ビューを保存したいプロジェクト名、データセット名を選択、更にテーブル名(ビュー名)を入力して保存を押下。

ビューが対象データセット配下に作成されました。カラム定義は以下のような形に(説明欄が編集可能)、

ビューが対象データセット配下に作成されました。カラム定義は以下のような形に(説明欄が編集可能)、

 

CLI(bq mk)経由

上記の内容をCLI(bq mkコマンド)を使って実践してみた内容が以下となります。一点、--labelの部分について単一のkey:valueでは問題なかったのですが、ドキュメントに記載の通り「カンマ区切りで複数並べる」形を試してみたところ、上手くいきませんでした。この辺なんか「ちゃんと出来る」書き方とか、あるのかなぁ...

$ bq mk \
--nouse_legacy_sql \
--label production:false \
--description "マーベルの登場回数 TOP30" \
--expiration 0 \
--view '
SELECT 
  name_alias,
  appearances,
  gender,
  full_reserve_avengers_intro,
  year,
  years_since_joining,
  honorary,
  notes
FROM
  cm-xxxxxxxxxxxxxx.cmbqdataset.marvel_characters
ORDER BY
  appearances DESC
LIMIT 30
  ' \
--project_id cm-xxxxxxxxxxxxx \
cmbqdataset.marvel_characters_by_cli

View 'cm-xxxxxxxxxxxxxx:cmbqdataset.marvel_characters_by_cli' successfully created.

 

クライアントライブラリ(Python)経由

次いでクライアントライブラリ(Python SDK)経由での実行内容。最低限の実装です。

create-bigquery-view.py

from google.cloud import bigquery
client = bigquery.Client()

shared_dataset_ref = client.dataset('cmbqdataset')
view_ref = shared_dataset_ref.table("marvel_characters_by_python")
view = bigquery.Table(view_ref)

sql_template = """
SELECT
  name_alias,
  appearances,
  gender,
  full_reserve_avengers_intro,
  year,
  years_since_joining,
  honorary,
  notes
FROM
  cm-xxxxxxxxxxxxxxxxxxx.cmbqdataset.marvel_characters
ORDER BY
  appearances DESC
LIMIT 30
"""
view.view_query = sql_template
view = client.create_table(view)  # API request

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

実行結果は以下の通り。

$ python create-bigquery-view.py 
Successfully created view at cm-xxxxxxxxxxxxxxxxxxx:cmbqdataset.marvel_characters_by_python

実際のビューも以下の内容で作成出来ていることを確認出来ました。

 

まとめ

という訳で、BigQueryのビュー作成を色々な方法で実践してみた内容のまとめでした。

テーブル作成程の細やかな設定はなかったですが、テーブル同様に重要かつ利用頻度も非常に多くなる事が予想されるであろう「ビュー」。上手く活用していきたいところです。