Google BigQuery Analyticsを読んでみた

Google Big Query(グーグルビッグクエリー)の本

「この本に何が書いてあるか教えてほしい。あとブログ書いて」
IT系ベンチャー企業でインターンを始めた筆者が初日に渡された本は、ビッグデータ分析ツールについて書かれた洋書でした。社長はなにを考えていらっしゃるのでしょうか。なにかの間違いで採用された文系大学生に無理難題を押し付けて、辞めさせようというのでしょうか。きっとそうに違いありません。しかし、ここで辞めるわけにはいきません。なぜなら溜池山王のおいしいごはん屋さんを食べつくさなければならないからです。こうして筆者は、ネットワーク界隈に跳梁跋扈する小難しい専門用語やつかみどころのない概念に立ち向かうことを決意したのです。

(注)この記事の目的は、ビッグデータ分析を支える技術とGoogle BigQueryを用いる利点について、予備知識なしで読めるという意味でかんたんな説明を行うことです。

BigQueryとは

Google BigQueryとはひとことでいうと、データ分析の道具です。50字以内で簡潔に述べると、クラウド技術によってグーグルが提供するストレージとサーバを使ってビッグデータの蓄積と分析を行える道具、とでもいえるでしょうか。かんたんなSQLが書ければ、ウェブ上のユーザー・インターフェースを使ってBigQueryを操作することができます。もしあなたがプログラマなら、BigQueryの提供するAPIを駆使して、より自由度の高い分析を行うことができるでしょう。SQLやAPIの意味は後述しますね。

ハードウェア単体の性能向上に天井を感じたグーグルは、ハードウェア規模の拡大とソフトウェア技術の向上にリソースを割いてきました。この記事ではソフトウェア技術に注目します。コンピュータでデータを扱うには、ハードディスク上のデータを管理するためのファイル・システムをはじめとして、データベースを管理するためのシステムや、データベース上で処理を実行するためのデータベース・エンジンといったソフトフェアのインフラが必要となります。

初学者のためのデータベース基本知識

データはふつう、行列の形をとります。これを構造化データ、またはテーブルなどと呼びます。そして、特定のテーマのもとで管理された構造化データの集合をデータベースと呼びます。

データベースには、それを管理し、データの検索や抽出を行うためのシステムが必要となります。これをデータベース管理システム(Database Management System, DBMS)と呼びます。現代もっとも支配的なDBMSは関係データベース管理システム(Relational Database Management System, RDBMS)というもので、Structured Query Language, SQLはRDBMSに問い合わせるための代表的な言語です。余談ですが、広くRDBMS以外のDBMSを差す言葉として、NoSQLというものがあります。

第一次ビッグデータ革命

ビッグデータ創成期である2000年代前半、グーグルは新技術を次々と開発しました。それは、Google File System, GFSと呼ばれるファイル・システムや、NoSQLの草分け的なDBMSであるBigTableに代表されます。

またDBMSは、データベース上のデータに対して挿入、抽出、更新および削除といった処理を行うために、データベース・エンジンと呼ばれる部品を使います。グーグルは、ある分析処理を上位のマシンが分割し、下位のマシンに割り当てることで並列処理を行うMapReduceというデータベース・エンジンを開発しました。MapReduce技術を採用したHadoopは、ビッグデータ分析を行うためのもっとも有名なオープンソース・ソフトフェアの一つです。

第二次ビッグデータ革命

これらの技術に問題点が浮上してくると、その問題を解決し、代替する技術が生まれます。たとえば、GFSの後継であるColossus File System, CFSというファイル・システムや、GFSやCFSといったファイル・システム上で複雑なクエリを実行するDremelと呼ばれるデータベース・エンジンがこれにあたります。

CFSは、複数のマシンでファイルやストレージを共有する分散化ファイル・システムと呼ばれるもので、BigQueryに蓄積されたデータはネットワークを介して複数のchunk serverと呼ばれるサーバ上に分散されます。

グーグルは扱うファイル形式も刷新しました。BigQueryは、ColumnIOと呼ばれるデータ形式でテーブルの読み込みを行います。従来のDBMSは行単位でテーブルの読み込みを行うものが多いのですが、BigQueryのDBMSは、ColumnIO形式を使ったテーブルの読み込みを列単位で行うことで、高速な読み込み処理を達成しました。

それは、ほとんどのクエリで必要となるのは、テーブルがもつ多くの列のうちのほんの一部であるため、不要な列に目を向けない列単位の読み込みは、行単位のそれよりも高速なクエリの実行が可能となるからです。

列単位の読み込みがもたらすもうひとつの利点は、データの圧縮・解凍プロセスに起因します。データ圧縮のアルゴリズムとは、圧縮対象内の重複する内容を探して、より小さなデータに置き換えるとともに、その対応を記録することです。ある列に格納された値は、同一のデータ型をもつだけでなく値同士で相当の重複が予想されます。この点でも、様々なデータ型が格納された行単位よりも、列単位でデータを扱った方が効率的といえます。

BigQueryのデータベース・エンジンは、Dremelと呼ばれます。Dremelはまず、Mixerと呼ばれる上位ノードがShard(「破片」などといった意味)と呼ばれる下位ノードに対して、分割したクエリの一部を割り当てます。クエリとは、DBMS上でデータベースに対して下される処理命令のことです。
次に、Shardが計算した結果をMixerに送り返して、Mixerがそれを集計する。DremelはこれらMixerとShardによる樹状の処理系統によって、並列的な処理を可能にしたデータベース・エンジンです。

これらの技術を組み合わせて、グーグルの開発チームは1秒以内に1TBのテーブルを読み込むことができる分析ツール、BigQueryを創り上げたのです。

APIを駆使したBigQueryの操作も可能

グーグルは、BigQueryに代表されるさまざまなツールを提供しています。こういったツールの仕様のことをApplication Programming Interface, APIといいます。
APIとは、プログラマが、既存のアプリケーションソフトフェアがもつ基盤を利用して開発を行うことができる言語仕様のことを指します。

たとえば、Google Mapsが提供するGoogle Maps APIを使えば、Google Mapsのサービスをもとに、オリジナルの位置情報アプリケーションを作るといったことができるわけです。BigQueryの文脈でいうと、BigQuery APIとは、DremelやColumnIOといったBigQueryがもつソフトウェアのインフラを利用しながら、SQLに代表されるプログラミング言語をつかってよりプログラマの目的に適った拡張を行うための仕様である、ということができるでしょう。

グーグルの開発したクラウドコンピューティングに関わるAPIは、Google Cloud Platform上で公開されています。

データ分析は、処理・蓄積・分析という3つのフェイズに大別されます。Google Cloud Platformはそれぞれのフェイズで有用なツールを公開していて、たとえばApp Engineはデータ処理を担う高水準なAPIを提供します。高水準とは、ものごとが機械よりも人間に対して親切に設計されている、という意味で用いられます。ここでは本来プログラマが行う必要のある細かい設定をソフトウェアが補ってくれる、程度の意味です。BigQueryは、クラウド上のストレージに構造化データを蓄積するAPIと、SQLに似た文法で記述されるクエリを高速で実行し、対話的な分析を実現するAPIを提供してくれます。

MapReduce, RDBMSとBigQueryとの比較

BigQuery以外の代表的なデータ分析インフラとの比較をかんたんに行います。

DBMSの代表格であるRDBMSの多くはB木と呼ばれるデータ構造をもちます。あらゆる処理のなかでもっとも時間のかかるものはテーブルの読み込みであり、それ自体遅いだけでなく、ディスクの容量を食うために他の処理まで遅くしてしまいます。B木とは、ソート済みのデータをツリー構造で配置することによって、データ読み込み時のハードディスクの物理的な動作を軽減してくれます。しかし欠点として、BigQueryであればクエリの実行時に自動で行ってくれるデータベースの最適化を、RDBMSでは逐一クエリに合わせてプログラマが行う必要があります。

MapReduceとは、グーグルがDremelより前に開発したデータベース・エンジンです。どういうデータベース・エンジンかというと、マスターノードがワーカーノードに対して分割した処理の一部を割り当てるMapフェイズと、ワーカーノードの出した結果をマスターノードが集計して最終的な戻り値を返すReduceフェイズとに処理を分割するデータベース・エンジンです。MapReduceを特徴づけるのは、ワーカーノードを管理するコントローラーと呼ばれる存在です。ワーカーノードがうまく機能しない、または処理スピードが深刻に遅いとき、コントローラーは新たなワーカーノードに同じデータと仕事を割り当てることで、高速な処理を達成します。

それに加えて、MapReduceはハードウェアの増設に応じて機能の向上が見込める拡張性をもっています。反面、MapReduceはバッチ処理向けに設計されているため、対話的な分析には向いていません。バッチ処理とは予め定められた一連のプログラムを実行する処理のことで、対話的な処理とは対をなします。

まとめ

BigQueryは、ハードウェア性能の追究がもつ物理的・金銭的な限界と、既存のソフトウェア技術の弱点を乗り越えたビッグデータ分析のための道具です。

参考文献

Jordan Tigani and Siddartha Naidu, Google BigQuery Analytics. Wiley, 2014.