BigQuery でサブクエリを多用すると、複雑で可読性が低くなる場合があります。そういうときは、with 句が最適です。
間違いにも気づきやすいですし、他の人に見てもらうときにもわかりやすくなります。
本記事では with 句の具体的な使い方、可読性を高める方法をご紹介します。
目次
with 句の使い方
with 句は事前にクエリを定義するものです。メイン処理の中で定義したものを呼び出せます。
with 句なしクエリ
# 商品、カテゴリごとの閲覧数
SELECT
product_name,
category_name,
COUNT(fullVisitorId) AS view_count
FROM (
SELECT
s.fullVisitorId,
s.product_name,
c.category_name
FROM
`sample.testdata.sessions` s # サブクエリ:セッションテーブル
INNER JOIN (
SELECT
product_name,
category_name
FROM
`sample.testdata.category` # サブクエリ:カテゴリテーブル
GROUP BY
1,
2 ) c
ON
c.product_name=s.product_name
WHERE
s.type = 'PAGE'
GROUP BY
1,
2,
3)
GROUP BY
1,
2
with 句ありクエリ
WITH
sessions AS ( # セッションテーブル
SELECT
s.fullVisitorId,
s.product_name
FROM
`sample.testdata.sessions`
GROUP BY
1,
2,
3 ),
category AS ( # カテゴリテーブル
SELECT
product_name,
category_name
FROM
`sample.testdata.category`
GROUP BY
1,
2 )
SELECT # メインクエリ:商品、カテゴリごとの閲覧数
s.product_name,
c.category_name,
COUNT(s.fullVisitorId) AS view_count
FROM
sessions s
INNER JOIN
category c
ON
s.product_name=c.product_name
GROUP BY
1,
2
with 句なしクエリは、サブクエリが書かれてある箇所でクエリ全体の流れが中断されてしまう印象があります。
with 句ありクエリは、サブクエリが事前に書きだされ、メイン処理と独立しています。
こうすることで、サブクエリの中身も、メイン処理の流れも把握しやすくなります。
with 句は複数定義が可能です。最初に WITH を書いた後は、カンマ区切りで付け足します。
WITH
aaa AS (
SELECT id FROM a
),
bbb AS (
SELECT id FROM b
),
ccc AS (
SELECT id FROM c
),...
可読性を高める方法
with 句以外で可読性を高める方法をご紹介します。
クエリを書式設定
インデントをそろえると可読性が良くなります。
BigQuery は書式設定ができます。
コンソールから 展開>クエリを書式設定、もしくはキーボードから command(control) + shift + F
を同時に押すことで、書式が整います。
大文字・小文字をそろえる
大文字と小文字の使いわけをすると読みやすくなります。
予約語は大文字、それ以外は小文字とするパターンが多いです。
予約後 | SELECT, FROM, WHERE, GROUP BY, ORDER BY, DISTINCT, COUNT, MAX, MIN, CASE など |
SELECT # 大文字
event_date, # 小文字
event_name,
COUNT(pv)
FROM
test_table
GROUP BY
event_date,
event_name
まとめ
with 句の使い方、可読性を高める方法についてご紹介しました。
with 句は便利ですが、定義する数が多すぎると逆に見にくくなります。
そういう時はあらかじめテーブルやビューを作成しておくと良いです。
5つくらいなら with 句の定義でも良いかと個人的には思います。
この記事が参考になれば幸いです!