前回の記事
→BigQueryサンドボックスでSQLの勉強を始める
前回は以下の点について調べたことをまとめました。
- そもそもBigQueryって何??
- BigQueryは個人が勉強用に使えるものなのか
- 買った参考書を活かせる(そのまま実装できる)のか
目的
参考書(SQL 第2版 ゼロからはじめるデータベース操作)の5-1のコードでは動かなかったので備忘録として、
PostgreSQL vs BigQuery で CREATE VIEW の違いについてまとめます。
BigQueryでのCREATE VIEW
既存のテーブル「Shohin」からフィールド「shohin_bunrui」別にレコード数を集計して、
新たにフィールド「shohin_bunrui, cnt_shohin」を持つビュー「ShohinSum」を作成するという問題です。
コード比較
最終的に動いたコードを載せておきます。
CREATE VIEW ShohinSum (shohin_bunrui, cnt_shohin)
AS
SELECT shohin_bunrui, COUNT(*)
FROM Shohin
GROUP BY shohin_bunrui;
CREATE VIEW `training-262712.shop.ShohinSum`
AS
SELECT shohin_bunrui, COUNT(*) as cnt_shohin
FROM `training-262712.shop.Shohin`
GROUP BY shohin_bunrui;
何を変えたのか
参考書(PostgreSQL)ではビュー名の直後でフィールド名を指定します。
CREATE VIEW ShohinSum (shohin_bunrui, cnt_shohin)
BigQueryで同様にフィールド名を指定するとエラーになりました。
CREATE VIEW `training-262712.shop.ShohinSum` (shohin_bunrui, cnt_shohin)
AS
SELECT shohin_bunrui, COUNT(*)
FROM `training-262712.shop.Shohin`
GROUP BY shohin_bunrui;
>>> Syntax error: Expected keyword AS but got "(" at [1:46]
フィールド名をSELECT文の中に書くことで解決しました。
CREATE VIEW `training-262712.shop.ShohinSum`
AS
SELECT shohin_bunrui, COUNT(*) as cnt_shohin
view_option_list(今後調べる予定)
調べる中で、BigQueryでは CREATE VIEW にオプションが付けられることが分かったので、次の記事でまとめたいと思います。
構文
{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}
view_name
[OPTIONS(view_option_list)]
AS query_expression
~中略~
view_option_listを使用すると、ラベルや有効期限などのビュー作成オプションを追加で指定できます。
参考にしたページなど
[データ定義言語ステートメントの使用(公式)]
(https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language?hl=ja#create_view_statement)
[How do I create a BigQuery View(stackoverflow)]
(https://stackoverflow.com/questions/25718707/how-do-i-create-a-bigquery-view)