BigQueryでビッグデータを解析する

2015年8月27日(木)
田村 知博

BigQueryとは

BigQueryは、Google Cloud Platformで提供されるビッグデータ解析プラットフォームです。1PB(ペタバイト)あるいは10億行といった膨大なデータに対して、集計・分析処理を極めて高速に実行できます。処理はSQL風のクエリ言語で記述します。

処理対象のデータは、リレーショナルデータベース(RDB)と同様に「テーブル」としてBigQueryに保持されます。つまり、事前にデータ構造をスキーマとして定義しておき、それに沿ったデータが独立したレコードとして登録されます。

BigQueryの特徴のひとつは、内部的にカラム指向データ構造を持っているという点です。一般的なRDBは、性質の異なるカラムを並べ、1件のレコードをひとまとまりとして格納するレコード指向データ構造です。それに対してBigQueryでは、レコードを分解し、カラムごとに格納します。

カラム指向データ構造には、性質の同じデータをまとめることにより圧縮効率が高まる他、クエリに対し必要なカラムにのみアクセスできるため、データアクセスが最小限ですむという利点があります。実際、BigQueryの料金はアクセスしたカラムのデータ量に応じて発生するので、これは重要な点です。以下の表に、BigQueryの料金体系についてまとめます。

表1:BigQueryの料金体系

リソース料金
データのインポート無料
データのエクスポート無料
ストレージ1GBあたり$0.020/月
クエリ(月ごとに1TBの無料利用枠あり)アクセスしたデータ量1TBあたり$5
Streaming Insert200MBあたり$0.01

BigQueryへのレコード登録のためのアップロード、あるいは処理結果のダウンロードといったトラフィックについては無料です。またBigQueryに格納したデータ量に基づく料金は、1GBにつき$0.02/月で、Google Cloud StorageのDRAストレージと同等となっています。クエリに基づく料金は、前述したとおりアクセスしたカラムのデータ量1TBあたり$5で、テーブル全体のデータ量とは関係ありません。Streaming Insertはデータのアップロード方法によって発生しうる料金ですが、のちほど詳しく解説いたします。

また、大規模・長時間に渡る処理については、あらかじめ問い合わせの上契約することで、70%のコストダウンが可能です。詳しくは公式ページ(https://cloud.google.com/bigquery/?hl=ja)を参照してください。

BigQueryを体験する

それでは、BigQueryの利用方法や料金体系について確認するため、実際に使用してみましょう。他のGoogle Cloud Platformのサービスと同じく、BigQueryにもコマンドラインツールでの操作、APIでの操作、Web UIでの操作が提供されています。ここではWeb UIからBigQueryを使用してみます。

BigQueryのテーブルはプロジェクトの配下に作成しますので、プロジェクトを選び、プロジェクトダッシュボードに移動します。ここで左カラムの下部から[ビッグデータ > BigQuery]と選択するか、右の画面から[BigQueryを試す]をクリックすると、Big QueryのWeb UIが表れます。

BigQueryトップ画面

図1:BigQueryトップ画面

左側にある[COMPOSE QUERY]というボタンをクリックすると、クエリの入力画面が表れます(図2)。

BigQueryクエリ画面

図2:BigQueryクエリ画面

ここにSQL風のクエリを記述すれば、結果が得られます。このプロジェクトにはまだデータを登録していませんが、BigQueryではサンプルデータが用意してあるため、クエリを体験することができます。左下の「publicdata:samples」をクリックし、wikipediaを選んでみましょう(図3)。

サンプルデータからWikipediaスキーマを選択

図3:サンプルデータからWikipediaスキーマを選択

クエリ入力フォームの下でテーブルの詳細が確認できます。titleというカラムがあるので、まずはこれを利用してレコードの数を数えてみましょう。

SELECT COUNT(title) FROM publicdata:samples.wikipedia;

と入力し、[RUN QUERY]を押し、少し待つと下部に結果が表示されます(図4)。

クエリの実行結果が表示される

図4:クエリの実行結果が表示される

「f0_」の項がCOUNTの結果で、このテーブルには3億レコードほど含まれていることがわかります。また[Show Options]ボタンの右に「Query complete (2.6s elapsed, 6.79 GB processed)」と表示されています。これは前述のクエリに対し処理時間は2.6秒、アクセスしたデータ量(今回の場合titleカラム全体の量)が6.79GBという意味です。

それでは、クエリの条件を変えるとどうなるでしょうか?

SELECT title FROM publicdata:samples.wikipedia LIMIT 5;

と入力し、titleカラムの先頭5件を取得してみましょう(図5)。

取得するデータを先頭の5件に限っても、データ量は変わらない

図5:取得するデータを先頭の5件に限っても、データ量は変わらない

5件のtitleの他、「Query complete (3.1s elapsed, 6.79 GB processed)」と表示されました。6.79GBの部分は、前述のクエリと同じです。このように、BigQueryでは条件によらず、クエリに表れたカラムのデータすべてにアクセスします。基本的に、クエリの条件によってアクセス範囲を狭めることはできないため、大規模データ処理のためのクエリを試行錯誤する段階では、小さなテーブルを別途用意すると良いでしょう。

ただし、場合によっては「Table Decorator」という機能によりアクセス範囲を制限することも可能です。これについては後述します。

株式会社ゴーガ

新潟県南魚沼市出身。某大手メーカー勤務を経てゴーガへ入社。現在は Angular.js によるフロントエンド開発や、GCP・AWS などのクラウドコンピューティングプラットフォーム関連の業務を担当。AWS 認定ソリューションアーキテクトアソシエイトを取得。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています