今年の五月に正式版がリリースされたばかりのサービスBigQueryとGoogleAppEngineを連携させてみるのが今回のテーマ。
まず、今年のGoogle I/Oで発表された「Building data pipelines at Google Scale」を紹介する。
このデモンストレーションはGoogleAppEngineのDataStoreのデータをCSVに変換し、GoogleCloudStorageにファイル出力する。そのデータをGoogleBigQueryの解析に使う。
という流れになっている。
【手順】
1.プロジェクト作成・まず必要な準備はGoogleBigQuery APIとGoogleCloudStorageを利用可能な状態にする必要がある。これはGoogle APIs Consoleから可能だ。
・TeamよりAccountSettingを行って、GoogleAppEngineからアクセスできるようにしよう。
・GoogleBigQueryのプロジェクトIDを覚えておこう。#project:以降の数字部分(https://code.google.com/apis/console/?pli=1#project:111111:bigquery)
2.テストデータの準備
・GoogleCloudStorageにbucketを作成しよう。ここではdatastore_csvoutputという名前で作成。
・BigQueryWebUIよりdatasetの作成も行おう。ここではdatasetという名前で作成。
3.MapReduceアプリケーションを作成
・今回のプロジェクトはMapReduceフレームワークを使用して、データの作成を行う。
・MapReduceのインプットデータとなるProductSalesDataのプロパティーは以下のとおりとなる。
・モックデータの作成 ・各種プロパティの設定 ・MapperPipelineを作成
MapperPIpelineのパラメータの説明をすると、
第一パラメータはpipelineの名前、第二パラメータはmap関数、次の2つのパラメータはinput_readerとoutput_readerリーダーの指定、input_readerとoutput_readerにはbucket名やACLなどのパラメータを設定することができる。最後にshard数。
続いてMap関数について
ここでは二つの事を行っている。一つはCSVフォーマットに整形しているのと、もう一つはGoogleBigQueryのdatasetとして扱う為にDateTimeのtimestampをPOSIXへと変換している。
・GoogleBigQueryへデータを格納
GoogleBigQueryのdatasetへと登録するpipeline処理は下記の通りとなっている。
GoogleBigQueryサービスのAPIを使用してdatasetを格納する。その際jobの定義を行うJSONオブジェクトが必要となる。
以上で準備は完了。
・デプロイ
下記のようなハンドラーを作成する。
【実行】
・モックデータをDatastoreへ格納、pipeline処理実行http://your-app.appspot.com/add-dataにアクセスするとデータが格納される。
続いて、pipelineを実行する。
http://your-app.appspot.com/startにアクセスするとpipeline処理が実行される。
・GoogleCloudStorageに格納されたCSVファイル
このようなCSVファイルが確認できる。
・BigQueryWebUIよりQueryを実行
BigQueryWebUIでインポートされたデータが確認できる。
Queryを実行してみる。
【まとめ】
今回はGoogleAppEngineとGoogleCloudStorageとGoogleBigQueryを連携させてみた。
興味深いのはやはりGoogleCloudStorageとGoogleBigQueryの連携である。
今回はDataStoreに格納されているデータを一度GoogleCloudStorageに格納させてGoogleBigQueryにインポートという回りくどい(?)と思われる手法をとっているが、
効率的にGoogleAppEngine側のアプリケーションの出力を直接GoogleCloudStorageに行い、GoogleBigQueryにインポートの方が、効率的に思われる。
いずれにしてもアプリケーションの幅が広がることには違いない。
現在開発中のプロジェクトにも取り込みたいと思っている。
次回もGoogleAppEngine関連のエントリーにしようかな。
つづく。