ソロソロ来るゾ! Google Cloud Platform!

第6回(最終回) データ解析基盤のBigQuery

BigQuery

BigQueryはビッグデータ解析SaaSです。立ち位置としてはAWSで言うところのRedshiftに相当するようなサービスですが、趣はずいぶん異なります。Redshiftは事前にデータ容量などを計画し適切なプランを選択することになりますが、BigQueryはそのような峻別は不要で、細かいことは気にせずとにかく使いはじめることができます。

筆者の周囲ではGCPの中で一番最初に浸透して行ったサービスがBigQueryです。皆の課題を解決する魅力と力の溢れているサービスだからでしょう。BigQueryはDevelopers ConsoleのBig Dataの中にあります。

図1 BigQueryはDevelopers ConsoleのBig Dataの中にある
図1 BigQueryはDevelopers ConsoleのBig Dataの中にある

BigQueryの特徴

BigQueryの技術的な特徴としてはカラム型DBMSです。Googleの持つ分散技術を背景に、データを超分散配置し並行操作することで大量のデータを扱うクエリでの短時間応答を実現しています。

提供形態はSaaSで、よほど大量のデータをセミリアルタイムで取り扱いたいケースでない限り、事前のスケールに対する配慮は不要です。詳しくは後述の制限のあたりを確認してください。

BigQueryではデータを取り扱うためにクエリを使います。クエリはSQLライクな文法なので、SQLが書けるのであれば学習コストはとても低いです。

検証してみたいけれどデータがない、という場合も大丈夫! サンプルデータがあらかじめ用意されているのでいろいろ試せます。

GitHubのリポジトリデータやWikipediaのリビジョンヒストリなどが用意されています。

図2 GitHubのリポジトリデータやWikipediaのリビジョンヒストリなどが用意されている
図2 GitHubのリポジトリデータやWikipediaのリビジョンヒストリなどが用意されている

今回は313,797,035行(35.7GB)のデータがあるwikipediaテーブルを使って動作を試してみます。

試しにcontributor_usernameの先頭3文字の登録数TOP100を調査してみます。この場合は以下のクエリを実行します。

SELECT username_prefix, COUNT(*) AS cnt FROM (
  SELECT LEFT(contributor_username, 3) AS username_prefix
  FROM [publicdata:samples.wikipedia]
  WHERE contributor_username IS NOT NULL
) GROUP BY username_prefix ORDER BY cnt DESC LIMIT 100;

すると313,797,035行(35.7GB)の中から2.49GBのデータを走査し結果が表示されます。この間わずか3.1秒です。素晴らしいですね。

図3 35.7GBの中から2.49GBのデータを走査し結果、この間わずか3.1秒
図3 35.7GBの中から2.49GBのデータを走査し結果、この間わずか3.1秒

活用例

バッチ処理でガッツリとデータ投入して解析する流れで使うこともできますが、Streaming Insertsでデータを随時投入し、ほぼリアルタイムのデータ解析する利用方法が盛んです。

Streaming Insertsの実装方法はfluentdが多いようです。ログの吸い上げにfluentdを使いfluent-plugin-bigqueryプラグインでBigQueryにデータ投入するのが定番です。

サーバからほぼリアルタイムに収集したログを毎分集計し、ほぼリアルタイムに状況を把握するという利用方法も可能です。

なおGoogle Analytics Premiumでは生データをBigQueryに溜めて自分で好きなように解析できるようです。

価格

主にデータ容量、データ投入(Streaming Inserts⁠⁠、クエリ実行時のデータ操作量に費用がかかります。

データ容量は1GBあたり月$0.02です。1TB投入しても月$20。ものすごく安いですね。

データインポート(データ投入⁠⁠、データエクスポート、テーブル読み込み、テーブルコピーは無料です。

データ投入について上記の通りバッチ処理的なデータ投入は無料ですが、Streaming Insertsの場合は100,000行あたり$0.01かかります。

クエリ実行時のデータ操作は最初の1TBは無料、以降1TBあたり$5です。

データサイズの計算方法

データサイズはデータ型によって決まります。 各データ型のデータサイズは以下のとおりです。

データ型 データサイズ
STRING 2 bytes + the UTF-8 encoded string size
INTEGER 8 bytes
FLOAT 8 bytes
BOOLEAN 1 byte
TIMESTAMP 8 bytes
RECORD 0 bytes + the size of the contained fields

制限

クエリ、データインポート、Streaming Insertsそれぞれで各種制限・上限が設けられています。データ量、1日あたりの処理回数など様々あるので、テスト利用から本番利用に移行するタイミングなどでよくよく確認しておきましょう。

Streaming Insertsは1行20KBまで、1回のinsertで1MB・500行まで、テーブルあたり1秒あたり10,000行・10MBまでという制限があります。特にピーク流量が上限に抵触しそうな場合は、テーブルを分割するなどの方法で回避しましょう。

おまけ:GCPのAndroidアプリができました!

GCPを管理できるAndroidアプリができました。まだBETAですが、Playストアからインストールできます。端末に紐付いているGoogleアカウントの情報を使ってくれるので、別途アカウントを設定する必要はありません。

図4 Cloud Console
図4 Cloud Console

アプリではリソース状態や課金額の確認などができます。

図5 Cloud Consoleではリソース状態や課金額の確認などができる
図5 Cloud Consoleではリソース状態や課金額の確認などができる

緊急時に専用のアプリで状況を確認できるのはとても便利ですね。

おわりに

本連載では全6回に渡りGoogle Cloud Platformの各サービスを紹介してきました。現時点ではクラウドと言えばAWSという市況ですが、昨年からグングン追い上げてきているGoogle Cloud Platformの魅力が少しでも伝われば幸いです。

おすすめ記事

記事・ニュース一覧