非エンジニアでもBigQueryでデータ分析できる!SQL入門!

こんにちは!せっかくBigQueryにデータを貯めているのに、SQLがハードルでデータ抽出できないってことはありませんか?毎回エンジニアにデータ抽出を依頼するのは面倒だし...ということで非エンジニアでもできるSQL入門記事です。

はじめに
BigQueryは従量課金でクエリを実行するたびにクエリのデータ量に応じた課金がされます。なのでうっかりビッグデータにクエリ実行して○○円かかってしまった!とならないように、キャプチャ赤枠の想定データ量を確認してからクエリ実行するようにしましょう。($6.00 / TBなので1GB程度のクエリであれば全然問題ないと思います。)

画像1

あとDELETE、UPDATE、INSERTは行わないようにしましょう。
DMLといわれるデータ操作言語です。これだけ気をつければ、どれだけクエリ実行してもテーブルのデータが更新されたり、消えちゃったということにはなりません。

SQLでテーブルからデータを抽出する
ではSQLでテーブルからデータを抽出しましょう
テーブルは基本的には行×列のマトリクスです。Excelやスプレッドシートと同じです。

画像3

上記の売上管理テーブルから黄色にハイライトした、9/3のBB子さんの売上を抽出します。

SELECT
 *
FROM
 `test_dataset.Sales_detail`
WHERE
 Date = '2021-09-03'
 AND Customer_number = 'B001'

SELECT句
抽出する列を指定します。アスタリスク(*)は全列指定のワイルドカードです。名前と売上だけ抽出する場合は、SELECT Customer_name, Salesです。
他にも* except(Customer_number)でCustomer_number以外の列を抽出ということもできます。
FROM句
抽出するテーブルを指定します。
WHERE句
抽出する行を指定する条件式です。Excelやスプレッドシートで言うところのフィルター機能にあたります。AND条件とOR条件が設定可能で、例えばWHERE Sales >= 8000 と書けば、Salesが8000以上の行を抽出します。
※覚えておきたいSQLの実行順序
さて、SELECT、FROM 、WHEREの各ステートメントの意味は分かったと思いますが、ここで覚えておいて欲しいのが各ステートメントの実行順序です。FROM→WHERE→SELECTの順で実行されます。抽出するテーブルを指定して、抽出する行を条件式でフィルタリングして、抽出する列を指定するという流れです。

集計に必須!GROUP BYとORDER BY
次に集計に必須なGROUP BYとORDER BYです。
GROUP BY

画像3

AA太郎さんの総売上を知りたい...
そういう時は複数行をまとめて、SUM(合計)やCOUNT(カウント)できるGROUP BY句の出番です。

SELECT
 Customer_number,
 SUM(Sales)
FROM
 `test_dataset.Sales_detail`
WHERE
 Customer_number = 'A001'
GROUP BY
 Customer_number

GROUP BY句
GROUP BY Customer_numberでCustomer_numberでグループ化しています。グループ化とは、同一値の行を1行にまとめちゃいましょう!というステートメントです。
GROUP BY句はWHERE句の後に実行されると決まっているので、このSQLの実行順序はFROM→WHERE→GROUP BY→SELECTですね。
抽出するテーブルを指定して、抽出する行を条件式でフィルタリングして、顧客Noでグループ化して、抽出する列を指定するという流れです。
SELECT句にSUM(Sales)と書いているのは、グループ化して1つにまとめた行のSalesを合計するという意味です。

ORDER BY句
Excelやスプレッドシートでいうところのソート機能です。
ORDER BY Customer_number ASC でCustomer_number順に昇順ソート
ORDER BY Customer_number DESC でCustomer_number順に降順ソート、
ASC、DESCはascending(昇順)、descending(降順)の略です。

まとめ
いかがでしょうか、SELECT、FROM、WHERE、GROUP BY、ORDER BYの5つのステートメントだけでもExcelやスプレッドシートで表を操作するのと同じかそれ以上にデータ抽出を楽に行えることがわかっていただけたと思います!あとはユニークな行を抽出するSELECT DISTINCTや複数テーブルを結合するJOIN句を覚えれば、かなり自由度高くデータ分析ができます。

いいなと思ったら応援しよう!