BigQueryを導入してデータの蓄積を始めたのに、分析言語のSQLがいまいちわからない
とお悩みの方は多いのではないでしょうか。
SQLはプログラミング未履修のマーケターの方でも基本を覚えれば、十分に分析を始められるようになります。
本記事ではBigQueryのSQLの基本と、実際の業務で使えるSQLの用例集(チートシート)をご紹介します。
BigQueryのテーブルにSQLを実行する
BigQueryの画面を開いたら、左側のデータセットとテーブルの一覧よりSQLを実行するテーブルを選択します。選択したテーブルのスキーマなど詳細情報が表示されるので、上部の「クエリ」を選択すると、SQLのエディタータブを開いて、「実行」でSQLを実行できます。

SQL実行時に注意すること
SQL実行時には以下の2点に注意しましょう。
・テーブルのデータを変更するDMLステートメントの実行に気を付ける
DMLステートメントとは、更新(Update)、挿入(Insert)、削除(Delete)を行うSQLのことで、これらのSQLを実行するとその名前の通り、テーブルのデータを変更してしまい基本的には元に戻せなくなってしまうので、SQLに慣れないうちはDMLステートメントの実行は避けるのが無難です。
・ドライラン機能で、SQL実行時のデータ処理量を確認する
BigQueryでSQLなどのジョブを実行する費用は従量課金制です。安価なBigQueryとはいえ、途方もない量のビッグデータや、複雑なSQLを実行すると思わぬ金額が課金されてしまったとなりかねません。右上にSQL実行時のデータ処理量の目安が表示されるので、確認するようにしましょう。このSQL実行前にデータ処理量の目安を表示する機能をドライランと言います。

基本的なSQL
BigQueryで使うSQL言語は正確にはGoogleSQLと言います。MySQLやMicrosoft SQL Serverなど他のDBで使用するSQLと基本的な構文は同一ですが、一部他のDBでは使用できるのにBigQueryでは使用できない構文も存在するので注意しましょう。
SELECT文でデータを取得
SQLの基本構文は、SELECT [取り出す列] FROM [データセット名].[テーブル名]; です。
例えば、SELECT customer_id, customer_name FROM customer_table;
このようなSQLだと、「customer_table」という顧客に関するテーブルから、「customer_id」、「customer_table」を全て取得します。
SELECT *(アスタリスク)は全ての列の取得です。
SELECT * FROM customer_table;
このSQLは「customer_table」という顧客に関するテーブルから、全ての列を取得します。
WHERE句で取得する条件の指定
SELECT文でデータを取得できるようになったら、次はWHERE句でどのデータを取得するか条件指定しましょう。
WHERE句では、=(等しい)、>(大きい)などの算術演算子と、AND(アンド)、OR(オア)などの論理演算子で取得するデータの条件を指定できます。
例えば、SELECT * FROM customer_table WHERE customer_id = ‘113’;
このようにすると、「customer_id」が’113’の顧客のデータを取得します。
SELECT * FROM customer_table WHERE customer_id = ‘113’ OR customer_id = ‘143’;
この例だと、「customer_id」が’113’又は’143’の顧客のデータを取得します。
GROUP BY句でグループ化して集計
SELECTとWHEREで任意のデータを取得できるようになったら、次は、Excelなど表計算ソフトでSUMなど合計を出したりしているように、グループ化して集計処理を行いたいですよね。
グループ化はGROUP BY句で行い、集計処理はExcelなどと同じようにSUM()やCOUNT()を使います。
例えば、SELECT age, COUNT(age), SUM(sales) FROM customer_table WHERE gender = ‘男性’ GROUP BY age;
このSQLでは、まずWHERE句でgender(性別)を男性と指定して、age(年齢)でグループ化しています。
SELECT文では、age, COUNT(age), SUM(sales)と指定していますね。これは、年齢、年齢ごとの顧客数、年齢ごとの売上の合計を取得しています。
もちろん条件指定する必要がなければWHERE句は無くても構いません。
SELECT age, COUNT(age), SUM(sales) FROM customer_table GROUP BY age;
WHERE句を無くすと、男女全ての年齢、年齢ごとの顧客数、年齢ごとの売上の合計、となりますね。
ORDER BY句でデータをソート
データを取得しても並び順がバラバラだととても見にくいですよね。取得するデータのソートにはORDER BY句を使います。ORDER BY句では並び替えに使用する列と、昇順・降順を指定できます。
並び替えに使用する列は複数指定可能で、昇順・降順はASC・DESCで指定します。(ASC:ascending(上昇)、DESC:descending(下降))
例えば、SELECT customer_id, customer_name FROM customer_table ORDER BY customer_id ASC, customer_name DESC;
このSQLでは、「customer_id」の昇順に並び替えて、同一の「customer_id」のデータを「customer_name」の降順に並び替えます。
ではここまで紹介したSELECT ~ ORDER BYの全てを使用すると例えば以下のようなSQLが実行できます。
SELECT age, COUNT(age), SUM(sales) FROM customer_table WHERE gender = ‘男性’ GROUP BY age ORDER BY age ASC;
このSQLでは、男性顧客の年齢、年齢ごとの顧客数、年齢ごとの売上の合計を年齢順に取得します。
このようにSELECT ~ ORDER BYの基本を覚えれば、SQLで分析を始められる実感を持っていただけると思います。
SQLの各構文の実行順に注意!
SQLの各構文は記述の順番と実際に実行される順番が異なる点に注意してください。SELECT ~ ORDER BYだと実行の順番は、
FROM → WHERE → GROUP BY → SELECT → ORDER BYです。
日本語化すると、まずFROMで対象のテーブルを選択して、WHEREで取得するデータの条件を指定、次にGROUP BYでグループ化、SELECTで取得する列を選択、最後にORDER BYでデータのソートです。
初めのうちは作成したSQLの内容と実行順をこのように言葉にして確認すると良いでしょう。
BigQueryのSQLチートシート
SELECT ~ ORDER BYで基本的な分析は可能ですが、一方でこれら以外にも分析に活用できるSQL構文が非常に多様なのもBigQueryの特徴です。ここからはSQLチートシートと題して、筆者が実業務で役に立った・多用する構文を紹介するので、是非使ってみてください。
SELECT * EXCEPT ([除外列])
SELECT文で特定の列以外の列を取得したい場合は、SELECT * EXCEPTを使用します。
例えば、SELECT * EXCEPT(customer_name, age) FROM customer_table;
このSQLでは「customer_name」、「age」以外の列を全て取得します。
現在日付と、+1日、-1日など日付の計算
日付に関する構文で最も使うのが、現在日付と日付の演算でしょう。それぞれ、
現在日付:CURRENT_DATE(‘Asia/Tokyo’)
現在時刻:DATETIME(CURRENT_TIMESTAMP, ‘Asia/Tokyo’)
+1日:DATE_ADD(CURRENT_DATE(‘Asia/Tokyo’), INTERVAL 1 DAY)
– 1日:DATE_SUB(CURRENT_DATE(‘Asia/Tokyo’), INTERVAL 1 DAY)
この構文で取得できます。’Asia/Tokyo’はタイムゾーンで、何も指定しないとUTC時間の日付を返されるので指定するようにしましょう。
CASTでデータ型を変更
各列はデータ型といって、あらかじめ格納可能なデータの形式が決まっています。数値型に文字列のデータが入っている!などエラーで怒られないように、CASTでデータ型を変更できると便利です。使い方は、
例えば、CAST(sales_date_str as DATE) as sales_date
この構文では「sales_date_str」という文字列型の列を「sales_date」という日付型の列に型変換しています。当然「sales_date_str」は日付型に変換できる形式(yyyy-mm-dd)の必要がありますが、このように変換可能な形式であれば簡単にCASTで型変換できるので覚えておきましょう。
まとめ
BigQueryのSQLについて、実は基本を覚えれば非エンジニアでも始めることができます。
SQLチートシートに関しては実はまだまだご紹介したい構文があるので、別記事で内容を追加、ボリュームアップできればと思います!
最後までお読みいただきありがとうございました。
株式会社KUIXではただ導入・開発するだけでなく、導入後の利活用を実現することに着眼した、BIツールの選定・導入からレポート作成、運用、啓蒙・展開までトータルのコンサルテーションなどを行っています。
「BigQuery/BIツールを導入したい」
「すでに導入しているがデータ活用、展開が進んでいない」など
お困りの方は、ぜひお気軽にご連絡ください!お問い合わせはこちらから
BigQueryのSQLチートシートをダウンロード


