今回はGCPでBigQueryを使ってみます。
BigQueryを利用するにはアカウント登録およびプロジェクトを作成しておく必要があります。これらの手続きがまだの方は以下のリンクを参照ください。
【GCP】① Google Cloud Platformを始める
BigQueryとは
BigQueryとはGCPが提供するデータウェアハウスサービスで、その中でSQLの実行機能も有しています。BigQueryの特徴はクエリ処理の速さにあります。
数テラ、数ペタバイトのクエリを実行するとなると通常処理に長い時間を要しますが、BigQueryでは数秒~数十秒のうちに完了させることができます(処理内容による)。
BigQueryのデータソース
BigQueryでは様々なデータソース、外部ツールと連携してデータを取り込むことができます。直接ファイルを読み込むこともできれば、ETLを介してシステムからデータを登録することもできます。また、APIを介したデータ登録も可能です。特にGoogleスプレッドシートやGoogle Analytics等Googleサービスとは親和性が高いです。
BigQueryを試してみる
データの取り込み
先述の通り、BigQueryへは様々なデータソースからデータを取り込むことができます。
ファイルから取り込み
ローカルにあるファイルを保存することができます。BigQueryに入り、「データを追加する」を選択します。
![ローカルファイルをアップロード](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_598,h_357/https://www.learning-nao.com/wp-content/uploads/2023/05/image-8.jpg)
「ファイルを選択」とあるところに読み込むファイルを指定します。ファイルはCSV、JSONなどに対応しています。
送信先には取り込みたいBigQuery データウェアハウス(DWH)のテーブルを指定します。
![読み込むファイルと取り込み先を選択](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_600,h_386/https://www.learning-nao.com/wp-content/uploads/2023/05/image-8.png)
Google Driveから取り込み
Google Driveからファイル等データを取り込む際はテーブルの作成元をドライブにします。取り込みたいファイルのURIを指定します。
![Google Driveからファイル等データを取り込む際はテーブルの作成元にドライブを指定](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_594,h_384/https://www.learning-nao.com/wp-content/uploads/2023/05/image-9.png)
AWS、Azureから取り込み
Azure Blob StorageやAmazon S3と連携してデータを取り込むこともできます。連携にはテーブル作成元と連携元のパス(S3またはAzure)を指定します。
その他外部システムからの取り込み
上記以外にも様々なデータソースからデータを取り込むことができます。DataFlow APIを用いて取り込む方法やパートナーサイトからデータを連携する方法(Infomaticaデータローダ等)があります。
サンプルデータの取り込み
BigQueryをとりあえず試したい場合は用意されたデータセットを利用する方法もあります。「データを追加する」から「公開データセット」を選択します。
![公開データセット](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_604,h_341/https://www.learning-nao.com/wp-content/uploads/2023/05/image-10.png)
すると、データセットの一覧が表示されます。2023年5月時点では200件のデータセットが提供されているようです。
![多くのサンプルデータセットが用意されている](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_620,h_548/https://www.learning-nao.com/wp-content/uploads/2023/05/image-11.png)
取り込むと、bigquery-public-dataというプロジェクトが一覧に表示されます。
![bigquery-public-dataというプロジェクトが一覧に表示される](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_590,h_357/https://www.learning-nao.com/wp-content/uploads/2023/05/image-12.png)
リソースの構造
通常データベースにはデータベース、スキーマ、テーブルのような構造がありますが、BigQueryにも似たような構造が存在します。
基本的にプロジェクト-データセット-テーブルの3層構造になります。実際の表データはテーブルに格納されます。似たようなテーブルはデータセットとして1つにまとめることができます。さらに、複数のデータセットをまとめてプロジェクトとすることができます。
これらの関係は、BigQueryのUI上からも確認することができます。
![プロジェクト-データセット-テーブルの関係](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_468,h_310/https://www.learning-nao.com/wp-content/uploads/2023/05/image-15.png)
クエリの実行
ここからはクエリを実行してデータを見ていきます。クエリはSQLの形で記述します。デフォルトでは「無題」となっている下図赤枠内に記述します。
![クエリはデフォルトでは「無題」となっている下図赤枠内に記述します](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_630,h_434/https://www.learning-nao.com/wp-content/uploads/2023/05/image-13.png)
簡単なクエリを実行してみます。テーブルはプロジェクト名.データセット名.テーブル名の形で記述します。「実行」を押すことでクエリが実行されます。
SELECT * FROM `bigquery-public-data.crypto_bitcoin.blocks` LIMIT 1000
![SELECT * FROM `bigquery-public-data.crypto_bitcoin.blocks` LIMIT 1000](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_702,h_509/https://www.learning-nao.com/wp-content/uploads/2023/05/image-14.png)
実行すると、結果が表示されます。今回はシンプルなクエリですが、テーブルの結合等も可能です。異なるデータセットのテーブルを結合することもできます。
結果を見る
実行結果には様々な情報が含まれています。
ジョブ情報
クエリを実行した日時や消費したバイト数等が表示されます。
![ジョブ情報](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_658,h_384/https://www.learning-nao.com/wp-content/uploads/2023/05/image-16.png)
結果
クエリの実行結果がテーブル形式で表示されます。
![結果](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_706,h_392/https://www.learning-nao.com/wp-content/uploads/2023/05/image-17.png)
JSON
結果セットがJSONフォーマットで表示されます。
![JSON](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_748,h_331/https://www.learning-nao.com/wp-content/uploads/2023/05/image-18.png)
実行の詳細
クエリ実行に要した時間や消費したバイト数が表示されます。インプットのデータ件数と処理後のデータ件数等も表示され、In/Outでのデータサイズの比較もできます。
![実行の詳細](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_752,h_382/https://www.learning-nao.com/wp-content/uploads/2023/05/image-19.png)
実行グラフ
クエリ実行時のデータフローおよびそれぞれのセクションでの処理件数、処理時間が可視化されます。
![実行グラフ](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_742,h_480/https://www.learning-nao.com/wp-content/uploads/2023/05/image-20.png)
結果の保存
クエリ実行結果はCSVやJSONとしてファイル出力できるほか、BigQueryのテーブルとして保存することもできます。
![結果の保存](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_734,h_512/https://www.learning-nao.com/wp-content/uploads/2023/05/image-21.png)
データの探索
クエリの実行結果をグラフで可視化する等さらに深堀したい場合は、「データを探索」からスプレッドシートやGoogle Colaboratoryと連携することができます。
![データを探索](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_681,h_284/https://www.learning-nao.com/wp-content/uploads/2023/05/image-22.png)
たとえば「Colabノートブックで探索」とした場合、Google Colaboratoryに遷移し、クエリ結果をPythonで操作することができます。
なお、デフォルトでPythonからBigQueryの実行結果にアクセスするコードは生成されるので、いちいちデータ接続のコードを書かずに済みます。下図のPythonコードは自動生成されたBigQueryとの接続処理です。
![Google Colaboratory](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_680,h_470/https://www.learning-nao.com/wp-content/uploads/2023/05/image-23.png)
まとめ
BigQueryでできることと簡単な使い方について紹介しました。
様々なデータを集め、お手軽に分析できるデータ分析の基盤として有用性は大きいと思います。大規模データにも対応した基盤性能なので、データウェアハウス基盤を検討されている場合はBigQueryも是非選択肢の1つに入れていただきたいです。
なお、重いクエリを実行しまくるとその分課金されてしまうので注意してください。
ではでは👋