BigQueryを分かりやすく! ハンズオンで始めるGoogle Cloudのデータ分析サービスと可視化ツールの使い方
Googleの高度な技術を利用できるGoogle Cloudにおいて、BigQueryは大規模データをスケーラブルに分析できるフルマネージドなデータウェアハウスとして提供されています。株式会社タイミーでデータエンジニアを務める土川稔生さんが、初心者向けのハンズオンとともにBigQueryの基本を解説します。
はじめまして。株式会社タイミーでデータエンジニアをしている土川(@tvtg_24)です。
タイミーでは、Google Cloudのデータ分析サービスであるBigQueryを中心に、データ基盤を構築しています。BigQueryではデータの保存や出力が行えますが、それだけではなく、可視化ツールの接続先としても用いることができます。そのため当社ではBigQueryが、社内のデータに関するさまざまなニーズに応えるための重要な役割を担っています。
当記事では、そんな日々のデータ分析に欠かせないBigQueryについて紹介します。 読者としては次のような方々を想定しています。
- 普段データを用いた意思決定をしているが、データ分析自体はしたことがない方
- データ分析に興味があるけど実際に分析したことない方
- 出力したいデータがあるが、出力の方法が分からない方
- BigQueryを触ってみたい方
Google Cloudが提供するBigQueryとは
Google Cloudは、Googleが提供するクラウドサービスです。Webサイトやアプリケーションの開発に始まり、データ分析や機械学習などといった、実にさまざまなサービスを提供しています。
その1つであるBigQueryは、大規模なデータの分析、機械学習などを支援するためのサービスです。通常はかなりの時間がかかってしまう大規模なデータであっても、BigQueryなら素早く処理できるので、とても人気が高いサービスです。
近年、スマホやSNSの普及により、かなり大きなデータ、いわゆるビッグデータを扱うことが多くなってきました。ビッグデータを扱う場合、分析そのものに加えて、データの管理にも多くの工数がかかります。しかしBigQueryなら、大がかりな環境を用意しなくとも、BigQuery側がデータの保存場所やクエリ実行に関するリソースを適切に管理してくれるため、利用者はデータそのものに集中できます。
基本的なデータ分析の流れ
データ分析には、基本的に以下の3つのステップがあります。
- データの収集、加工、保存
- クエリ実行によるデータの抽出
- 抽出したデータの可視化
そしてBigQueryでは、「データの保存」「クエリ実行によるデータの抽出」などが行えます。BigQueryによるデータ収集、加工も一部できますが、当記事は、あくまでデータの分析そのものに焦点を当てるため、収集と加工に関しては説明を省略します。
なお、クエリとは、データを抽出するための構文のことです。クエリを実行するとテーブルなどがスキャンされ、計算結果(データ)が返されます。BigQueryでは、SQLと呼ばれるクエリ構文を用います。
BigQueryを使うメリット
BigQueryの人気の高さにはさまざまな理由がありますが、その中でも特に大きいメリットを2つ紹介します。
1. 分析結果が返ってくるのが速い
BigQueryのアーキテクチャの特徴として、データを保存するストレージとデータを抽出するためのクエリエンジンの分離があります。BigQueryは、ストレージではデータをカラムごとに保存し、これらの分散されたストレージからのデータ抽出をクエリエンジンが並列に処理することで高速化を実現しています。
その一方、カラム型のデータベースは、データを行ごとに多く更新する処理(例えば、Webアプリケーション用のデータベースなど)は苦手です。そういったアプリケーションでは、RDB(Relational Database)などの行指向のデータベースが用いられることがよくあります。
2. 豊富な分析機能
BigQueryではクエリを実行するだけではなく、さまざまな分析・可視化ツールとの連携がしやすくなっているので、可視化もスムーズに行えます。ここでは可視化を行えるツールのうち、Looker Studioとコネクテッドシートについて紹介します。
Looker Studio
Looker Studioでは、さまざまな手法で可視化されたグラフやテキストなどを組み合わせたレポートを作れます。そして、それらの共有や、Webページへの埋め込みなども可能です。Looker Studioは、BigQueryでクエリを実行した後、クエリ結果のセクションから直接起動できます。なお、基本的に料金は無料です(別途クエリ実行による分析料金は発生します)。
より詳細に知りたい場合は、Looker Studioの概要を参照してください。
コネクテッドシート
コネクテッドシートは、クエリのリクエスト実行やスケジュール実行を、ユーザーに代わって行ってくれるツールです。クエリの結果はGoogleスプレッドシートに保存されるので、スプレッドシート上で可視化が行えます。スプレッドシートの扱いに慣れている方や、スプレッドシート上でデータをさらに加工したい方は、こちらを利用してみるのもよいでしょう。
なお、コネクテッドシートもLooker Studioと同じく、クエリ結果のセクションから直接起動できます。料金は無料です(別途クエリ実行による分析料金は発生します)。
より詳細に知りたい場合は、コネクテッドシートの使用を参照してください。
【補足】自動スケーリング
当記事はデータ分析に焦点を当てていますが、データの管理者にとってのメリットも補足しておきましょう。
前述の通りBigQueryは、データの保存場所やクエリ実行に関するリソースを適切に管理します。膨大なデータを保存したり、多くのデータをスキャンするクエリを実行したりしても、適切なスケーリングが行われます。それゆえに運用コストを大きく下げられる点は、データの管理者にとって大きなメリットです。
ただし、あまりにスキャン量の大きなクエリを実行すると失敗する場合もあるので、注意が必要です。
BigQueryの利用料金
BigQueryを使うと気軽にデータ分析できる一方、利用には料金がかかります。ここでは、分析の際にかかるコストとそれを抑える方法について紹介しておきましょう。
BigQueryの利用にかかる料金には大きく分けて2種類あります。それは、分析料金とストレージ料金です。
分析料金
分析料金はクエリの処理にかかるもので、クエリでスキャンされたデータに対して料金が発生します。料金は下記の通りで、記事執筆時点では、東京リージョンでの実行の場合、1TBごとに6ドルです。また、最初の1TBは毎月無料です。
オペレーション | 料金 | 詳細 |
---|---|---|
クエリ(オンデマンド) | $6.00 per TB | 毎月1TBまで無料 |
なお、分析料金には定額料金も存在します。これはクエリを実行するための仮想CPUを購入することで、ある料金以上の請求がされないようにするものです。これにより分析者は料金の心配をすることなく、クエリを発行できます。ただし、購入した容量以上のクエリを実行するとクエリのパフォーマンスが低くなる場合があります。また、最低購入容量が決まっているため、ある程度の規模の組織でBigQueryを導入する場合に、検討するのがよいでしょう。
ストレージ料金
ストレージ料金は、BigQueryにデータを保存することにかかるものです。ストレージには、アクティブストレージと長期ストレージの2種類が存在します。
アクティブストレージは過去90日間で変更されたテーブルが保存されます。そして長期ストレージには、90日間連続して変更されてないテーブルが保存されます。長期ストレージの料金は、アクティブストレージよりも安くなります。なお、アクティブストレージと長期ストレージは、パフォーマンスなどは同じです。記事執筆時点での、東京リージョンでの料金は以下の通りです。
オペレーション | 料金 | 詳細 |
---|---|---|
アクティブストレージ | $0.023 per GB | 毎月10GBまで無料 |
長期保存 | $0.016 per GB | 毎月10GBまで無料 |
利用料金を抑えるには
BigQueryで分析をする際に料金を抑えるにはいくつか方法があるので、ここでは以下の2点を紹介します。
1. クエリでselect *
を使わない
BigQueryはデータをカラムごとに保存しているため、パフォーマンスが高いことが特徴です。しかし、クエリでselect *
と記述すると、全カラムを指定していることになるので、コストが最も高くなります。このデータの中には不要なカラムが含まれている可能性もあるので、select *
の利用にはとくに注意するとよいでしょう。
2. クエリ実行前に処理データ量を確認する
後述するハンズオンでも出てきますが、BigQueryではクエリ実行前に何バイトのデータスキャン量がかかるかを確認できます。クエリスキャン量をもとに実行にかかる料金は概算できるので、思わぬ高額料金の発生を防げます。
ほかの方法については、BigQueryにおけるコスト最適化のベストプラクティスを参照してください。
BigQueryを用いたデータ分析ハンズオン
それでは実際にBigQueryを用いて、データの抽出→可視化という、データ分析の基本的な流れを体験してみましょう。今回は、BigQueryが提供している新型コロナウイルス感染症(COVID-19)のデータを、Looker Studioで可視化します。
本ハンズオンには、Google Cloudが提供するサンドボックス(お試し)環境を使います。サンドボックスでは、制限付きではありますが、クレジットカードなどの支払い情報を登録することなくBigQueryを利用可能です。サンドボックスの制限には、毎月10GBのアクティブストレージと1TBのクエリデータ処理などがあります。そのほかの制限に関しては公式サイトを参照してください。
今回のハンズオンは全てサンドボックスにおいて無料で実行できるデータ量なので、安心してください。ただし、以前からBigQueryを利用していて無料枠の1TB/月を超過している場合は、1円未満の料金が発生する可能性があります。
では、ハンズオンを始めていきましょう。
1. Google Cloudへのアクセス
まずは、Google Cloudへアクセスします。Google Cloudの利用にはGoogleアカウントが必要なので、持っていない場合はGoogleアカウントの作成から事前に作成して、ログインしておきましょう。
Google Cloudのトップページにアクセスし、右上の「コンソール」ボタンをクリックしてください。
Google Cloudへのアクセスが初めての場合、以下の画面が表示されます。利用規約を確認の上、チェックマークを付け、「同意して実行」ボタンをクリックしてください。
同意した後、以下のような画面が表示されたら、Google Cloudへのアクセスは完了です。
2. BigQueryへのアクセス
ページ左側にあるバーに「BigQuery」のボタンがあるのでクリックします。
すると以下のようなBigQueryの画面が表示されます。ただし、この時点ではBigQueryを実行するための「プロジェクト」が存在していません。「プロジェクトを作成」 ボタンから、プロジェクトを作成しましょう。
以下の画面が表示されたら、プロジェクト名に適当な名前を入力し、「作成」をクリックします。今回はプロジェクト名を「BigQuery-hans-on」にします。
以下の画面が表示されたら、BigQueryへのアクセスは完了し、分析の準備ができた状態です。
3. 一般公開データセットを確認する
BigQueryには、誰でも利用できるデータである一般公開データセットが用意されており、これらを用いて自由に分析や可視化を行うこともできます。これらのデータセットのストレージ料金はGoogleが負担しているので、あくまでクエリにかかる分析料金のみで利用可能です。
今回は、COVID-19のオープンデータについて見てみましょう。まず左側の「検索語句を入力」欄に「bigquery」と入力して検索してください。上記で設定したプロジェクト「bigquery-hans-on」のほかにも、たくさんのデータが表示されているはずです。
BigQueryではこれらのデータの階層ごとに名前が付いており、階層が浅い順にプロジェクト、データセット、テーブルと呼ばれています。プロジェクトはデータセットを複数保持していて、データセットはテーブルを複数保持しています。
表示された検索結果のうち、上から4行目の「ga_sessions_(366)」はテーブルの集まりです。その1つ上の階層である「google_analytics_sample」はデータセット、「bigquery-public-data」はプロジェクトです。この「bigquery-public-data」は、一般公開データセットを集めたプロジェクトです。
ではここで「bigquery-public-data」の右横にある星マークをクリックしてみましょう。そうすると、以下のように検索窓から「bigquery」という文字列を消しても画面に「bigquery-public-data」プロジェクトが表示されたままになっているはずです。そのため、よく利用するプロジェクトには「スター」を付けておくとよいでしょう。
続いて「bigquery-public-data」の左側にある「▶」ボタンをクリックして、プロジェクトを展開してみましょう。さまざまなデータセットが表示されるはずです。その中から「covid19_open_data」データセットを探して、同じく展開してみてください。
展開できたらデータセットの中にある「covid19_open_data」テーブルをクリックしてください。以下のように、右側の画面にテーブルの情報が表示されます。
右側に表示されている情報はテーブルのスキーマ情報になっています。つまりこれが、テーブルを構成するデータの列(カラム)です。「フィールド名」は列の名前、「種類」は列のデータ型を表します。
ここで、テーブル情報の中にある「プレビュー」ボタンをクリックすると、以下のようなデータが表示されるはずです。
プレビュー画面ではデータの一部や、データ数(右下の表示件数 = データの行数)を確認できます。データのカラム構成や、データの中身を一部確認したい場合などはクエリを実行せずとも、このプレビュー機能を利用できます。
上記のプレビューからは、本テーブルにはCOVID-19に関する場所や人数などの情報が含まれていること、22,756,333行のデータがあることが分かります。
4. クエリを実行し、データを抽出する
ではいよいよ、BigQueryからクエリを実行し、欲しいデータのみを抽出しましょう。以下の画像の赤枠で囲んだボタンをクリックすると、クエリを記述するためのエディタが表示されます。
エディタが表示されたら、以下のクエリをエディタ内に貼り付けましょう。
SELECT date ,country_name ,new_confirmed FROM `bigquery-public-data.covid19_open_data.covid19_open_data` WHERE country_name = 'Japan' AND subregion1_code is not null AND date BETWEEN '2022-01-01' AND '2022-08-31'
このクエリはselectで、date
(日付)、country_name
(国名)、new_confirmed
(新規感染者数)を設定しています。そしてwhere内では、国名がJapan、かつ日付が2022年1月から8月の終わりまでの条件を指定しています。subregion1_code
は各都道府県の番号が入っていますが、番号がnullのデータは日本全国の情報を指します。今回のwhere句ではsubregion1_code
がnullのデータは省きます。まとめると、このコードは「2022年1月から8月の終わりまでの、日本でのCOVID-19の新規感染者数」が日付ごとに返ってくるクエリとなっています。
エディタにクエリを入力して、以下のように緑色のチェックマークと「このクエリを実行すると、〇〇Bが処理されます。」と表示されたら、実行の準備は完了です。
なお、チェックマークが緑以外の色なら、クエリの記法が正しくない場合があるので修正が必要です。また、「〇〇B」の中身はクエリを実行する際に処理するデータの容量です。これによってクエリの料金をあらかじめ計算できます。 本クエリだと「約600MBが処理される」と表示されています。
BigQueryの分析料金は約$6/1TBなので、600MB = 0.0006TBより、$0.004 ≒ 0.6円くらいかかることが分かります。 ただし今回は、サンドボックスで提供されているクエリデータ(1TB)以内の容量なので、無料で実行できます。
それでは、エディタの上部にある「実行」ボタンをクリックしましょう。なお実行ボタンは、Windowsであれば「Ctrl」+「Enter」キーで、Macの場合は「cmd」+「Enter」キーで代用可能です。
上記のような結果が抽出できれば、成功です! 右下の表示件数から、今回抽出したデータは11,421行であることが分かります。
5. 抽出したデータの可視化
得られたクエリ結果は11,421件もあるので、このままでは、データの傾向や特徴などのインサイトを得ることは難しいでしょう。
そこで今回はBigQueryの画面から遷移して利用できる、可視化ツールを使います。画面の右側にある「データを探索」 ボタンをクリックしてください。 すると、以下のようにいくつかの選択肢が表示されます(現在は3つですが、BigQueryの仕様変更によっては変わる場合があります)。
現時点では、以下に対応しています。なお、記事執筆時点では「Colabノートブックで探索」はプレビュー版です。
- シートを使って調べる(コネクテッドシート)
- Looker Studioで調べる(Looker Studio)
ここではLooker Studioを用いて可視化を行います。「Looker Studioで調べる」ボタンをクリックしてください。すると、以下のような画面が表示されます。
これは、Looker Studioのレポート画面です。レポートの題名やテーブル、棒グラフが表示されています。
左側のテーブルは日本全体の新規感染者数であり、BigQuery上で抽出したデータの「new_confirmed」カラムの数値を合計したものです。右側の棒グラフは、左側のテーブルを可視化したものです。このままでは感染者の合計数しかインサイトが得られないので、少し修正していきます。
グラフはドラッグ&ドロップで、移動や拡大ができるので、左右に伸ばしたり移動したりして、グラフを下図のように変更してください。
棒グラフをクリックすると、グラフの設定項目が画面右側に表示されます。ここで、グラフの形、色、軸といったさまざまな設定を変更できます。
今回は抽出したデータに日付情報が含まれているので、時系列での新規感染者数を折れ線グラフで可視化してみましょう。上図の赤枠の「グラフ」ボタンをクリックし、その中から時系列グラフ(折れ線グラフ)を選択してください。すると、棒グラフが折れ線グラフに変更されて、x軸が日付情報になったのが分かります。
これで、棒グラフでは見えなかった「時系列での感染者数の傾向」をつかみやすくなりました。具体的には、以下の内容が読み取れるようになっています。
- 1週間のうちでも曜日ごとに感染者数の波があること
- 感染者数が2022年7月からかなり増加していること
なお、右側にある「スタイル」ボタンからは、グラフの色や大きさなどをアレンジできるので、ぜひいろいろ修正してみてください。これで、ハンズオンは終了です。
まとめ
当記事ではBigQueryを触ったことがない方向けに、主にBigQueryの分析面について紹介しました。今回はLooker Studioを用いて簡単な分析を行いましたが、ほかにもコネクテッドシートやGoogle Colaboratoryで、スケジューリングやPythonを用いた高度な分析も行えます。
そのほかにもBigQueryでは、BigQuery独自の関数や、他のユーザーが定義した関数(UDF)などを用いて高度なクエリ実行も可能です。このように、BigQueryにはさまざまな機能があるので、もっと知りたい方は、BigQuery公式ページも参照してみてください。
最後まで読んでいただきありがとうございました。
土川 稔生(Toshiki Tsuchikawa) twitter: @tvtg_24 / Github: ttccddtoki
編集:藤井恵(リブロワークス)
制作:はてな編集部