GoogleCloudPlatform
bigquery
ApacheBeam
GoogleDataStore
GoogleDataFlow

データプロダクトのための BigQuery:bigquery-to-datastore

More than 1 year has passed since last update.

BigQuery のテーブルを Google Datastore にエキスポートするツールを作ってみました.
このようなツールを作った背景についてまとめたいと思います.

flow.png

分析プラットフォームとしての BigQuery

昔,Apache Hadoop や Apache Hive をメンテナンスしていた人間からすると,BigQuery の便利さは驚異的です.処理速度だけでなく安定性とコスト面からいって,データエンジニアやインフラエンジニアを雇うよりも圧倒的に勝るものがあります.最近では,BigQuery を分析プラットフォームの中心に据え始めている企業も多いのではないかと思います.

大規模データを SQL で操作できるようになることで,「ビッグデータ」に精通したエンジニアなどだけでなく,多くの人にウェブスケールのデータの分析の門戸を広げました.

データ格納場所としての BigQuery

分析プラットフォームとしての BigQuery は言うべくもなくですが,BigQuery のストリーミング挿入の低価格化などにより構造化データの「置き場所」としても非常に適しています.例えば,サーバから Google Pu/Sub にログを送り,Google Dataflow/Apache Beam のストリーミングアプリケーションででデータを pull してきて,BigQuery にストリーミング挿入するというったことができます.つまり,BigQuery をログ収集の置き場所とすることができます.BigQuery に格納することによって,クエリを実行することですぐに分析できるのが魅力的です.

このようなログ収集の仕組みについて興味のある方は,つぎのサンプルコードが参考になります.

データプロダクトのための BigQuery

従来,データプロダクトを作るためには,Apache Hadoop MapReduce や Apache Spark などの,大規模データ向けのフレームワークを利用してアプリケーションを作る必要があります.しかし結局のところやることは,データを取得し,処理し,格納するという点においては変わりがありません.
困難さを高めているのは,扱うデータが大規模であるということです.大規模なデータをどうやって処理できるか,大規模なデータをどうやって格納できるということに頭を悩ませます.この開発の困難さは,常にデータプロダクトを作るためのアイディアに対してビハインドし,リリースするための時間を遅らせます.

またチーム開発という点においても,専任の大規模データプロダクトを作れるエンジニアを採用するのは大変です.大規模データプロダクトをきちんとメンテナンスできる体制を作り維持するのは容易ではないですし,人件費も高くつきます.

先に述べた通り,BigQuery の強みのひとつは,大規模データを SQL で操作できるという点です.
もし仮に,BigQuery の集計結果を新しいテーブルに格納し,そのテーブルを Google Datastore などの分散 KVS へ簡単にエキスポートできたらどうでしょうか?BigQuery それ自体が大規模データ分析を democratize しただけでなく,データプロダクトへの参入障壁が大分下がります.SQL だけでできるということはたくさんありますし,BigQuery は UDF もサポートしているので SQL 以上のことへも拡張しようとすれば出います.

bigquery-to-datastore

bigquery-to-datastore は BigQuery のテーブルのデータを読み取って,Google Datastore のデータ型に変換して格納するためのツールです.このツールがあれば,BigQueryのテーブルさえあれば,簡単に Google Datastore へ展開することができます.

bigquery-to-datastore の入力,処理,出力はそれぞれつぎを利用します.Apache Beam/Google Dataflow を使って,BigQuery のテーブルのデータをまるっと Google Datastore に格納するようになっています.詳しい使い方については,GitHub リポジトリを読んで下さい.

  • 入力:BigQuery
  • 処理:Apache Beam on Google Dataflow
  • 出力:Google Datastore

このような構成を取った理由として,スタートアップでは特にデータ系のインフラを整えるのが大変なので,基本的に fully-managed サービスで固めたかったからです.また Google Datastore はスキーマがないため,BigQuery のスキーマを読み取ってそのまま Datastore に格納するということがやりやすいため採用しました.これにより,メンテナンスから解放されるので管理者が基本的に必要なく,SQL さえかければデータプロダクトを作るということが可能になります.

まとめ

BigQuery はデータ分析プラットフォームとしてだけでなく,データプロダクトの起点になりえるということについて書きました.今回の構成は,基本的にデータ系のプラットフォームをメンテナンスしたくないという理由から,基本的にGoogle Cloud Platform に依存する形で作りました.もちろん,SQL で大規模データを処理して新たにテーブルを作り,HBase や Cassandra などの分散 KVS に格納するというアプローチもとれると思います.この記事は,bigquery-to-datastore のようなツールがあることの意味についてフォーカスしました.