非エンジニアでもBigQueryでデータ分析できる!SQL入門!
こんにちは!せっかくBigQueryにデータを貯めているのに、SQLがハードルでデータ抽出できないってことはありませんか?毎回エンジニアにデータ抽出を依頼するのは面倒だし...ということで非エンジニアでもできるSQL入門記事です。
はじめに
BigQueryは従量課金でクエリを実行するたびにクエリのデータ量に応じた課金がされます。なのでうっかりビッグデータにクエリ実行して○○円かかってしまった!とならないように、キャプチャ赤枠の想定データ量を確認してからクエリ実行するようにしましょう。($6.00 / TBなので1GB程度のクエリであれば全然問題ないと思います。)
あとDELETE、UPDATE、INSERTは行わないようにしましょう。
DMLといわれるデータ操作言語です。これだけ気をつければ、どれだけクエリ実行してもテーブルのデータが更新されたり、消えちゃったということにはなりません。
SQLでテーブルからデータを抽出する
ではSQLでテーブルからデータを抽出しましょう
テーブルは基本的には行×列のマトリクスです。Excelやスプレッドシートと同じです。
上記の売上管理テーブルから黄色にハイライトした、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
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句を覚えれば、かなり自由度高くデータ分析ができます。