2014年11月25日火曜日

ビッグデータな時代だからやるべきこと

大量のデータを取り扱う時、何が大変かっていうと大量だからだよね。データが小さければ、誰もそれほど悩まない。とか言いながら、「大量」ってどのくらい?ってことになると、大抵の場合メガバイトかギガバイトレベルなわけで、そんなんビッグデータでもなんでもないじゃん。ってことになるわけなんだけどさ。

しょせん企業が持っているデータはその程度なんだけど、でもやっぱりそれでも大変なところがあって。つまり集計する軸とか分析する軸とかがどうしても多くなってくるので、そうすると何百回もデータをなめまわすことになる。だからなんやかんやで、結局アホみたいに時間がかかってしまう。下手したら1日分の集計が1日で終わらないとか。

例えば車載機からの情報がたんまり集まってきているとする。そこから時間帯別の稼働率を調べたい。そこから危険運転の確認をしたいとか。集まっている情報には、エンジンの状態とか、走行距離とか、加速度センサーとか、緯度経度とか。まぁ、そういうシンプルなその時が刻まれているわけだ。時間帯別の稼働率なら、集まってきたデータから、時間帯毎に動いていたかどうかを集計すればいい。危険運転なら、急加速/急停止とかの回数や場所を調べればいい。

集まってきているデータ全体は、絶望的にデカかったとしても、集計したい軸にとっては全てが必要なわけじゃない。だからどうする?そう、デッカイデータから、必要な部分を取り出す。さっきの例だと、アホみたいにデカイデータから、時間帯別の稼働時間を抜き出す。元データがテラバイトだろうが、ペタバイトだろうが、そんな感じで抽出してしまうと結果はキロバイトとか、そんなちょっとしたデータになる。

ここ数年の流れからいうと、こうしたどデカイデータをちょっとしたデータに変える部分ってことになると、Hadoopというかmap reduceの出番的な雰囲気が漂っていた。まぁ、map reduceは、慣れてしまえばなんてことないものなんで、後はひたすら根性途切れないように黙々とやるだけだけど。でも、なんつうか、環境構築とか、そうは言ってもひたすらプログラム準備していくわけだし。Hiveとかいろいろ出てきても、なんかお手軽感は全くないし。そういうんじゃないんだよな。ということで、ウンザリして放り出してしまっていた人が多かったんじゃないかと。

map reduceの言い出しっぺは、Googleなわけだ。そのGoogleが、「俺たち、もうmap reduceとか使ってないもんね。てへぺろ。」という波動砲発言を発表したので、まじかよーウェーブがスタジアムを数周したのが今年の夏。

ま、その発表はDataflowというサービスに関することだったんだけど、それ言う前にBigQueryで充分そんな雰囲気を醸し出していたわけなので、Googleからしたらまじかよーとか、何をいまさらってところなんだろうな。

で、このBigQuery。すこぶる使い勝手がいい。さっきのどデカイデータをちょっとしたデータに変えるってのに最適。しかも、このBigQueryも何台ものサーバー使って超高速で処理してくれる仕組みなわけだけど、サーバーを何台使うとか、そういうことはよろしくやってくれるので、わずらわしいことがほとんどない。

こいつを使うためには、データをBigQuery環境にぶちこむ。ぶちこまれたデータは、消すまで保存される。そのデータ使って、シンプルなQuery使ってデータを絞り込む。絞り込んだデータは、再びBigQueryに戻すことができるので、そいつ使ってまたまた処理を続けることもできる。終わったらデータを取り出して、後はExcelとかなんでも好きなように使えばいい。つまりメンドくさいことを諸々省略できる。

このデータをBiguQuery環境にぶちこむところと、データを取り出すところは、お金がかからない。Query使ってデータを絞り込むところは、検索結果の毎月合計がテラバイトを超えないと無料。テラバイトを超えるとテラバイトあたり5ドル。保存は、毎月ギガバイトあたり2セント。

てな感じで、多分普通の用途だったら、毎月10ドルいくかいかないかだろうな。と激安。あー、ちなみにとりあえず使ってみようと思うなら、ぶちこむデータを小さめにすればいい。そしたら結果も小さくなるので。経験的に言うなら、ガンガン使っても月額請求は保存料の2セントだけ請求されて終了。2セント。2セントだぜ。ざっくり言うと2円だよ。チロルチョコも買えない。

使ってみるには、最初はDeveloper Consoleという画面があって、そこからQueryをいろいろ試せるので、そこから始めるのが便利。(ここの右上に「コンソールに移動」ってあるでしょ?そこからモゾモゾしていくとBigQueryにたどり着くから)ここでは画面でデータを確認しながら、Queryを色々と試してみることができる。こいつでデータを絞り込むと、結果をCSVファイルとして受け取ることもできるので、これで済むならいっちょあがり。

もう少しQueryを連続して使いたいとか、後で何度も実行したいなら、bqコマンドというツールがあるので、そいつでまとめていけばいい。

  bq query --destination_table=... "select ... from ... where ..."

てな感じ。destination_tableは、Queryの結果を保存するテーブルを指定するところ。

単純な検索で絞り込めるんだったら、Excelと組み合わせるのがいい。これやるためのプラグイン、BigQuery Connector for Excelというのがあって。ExcelにQuery組み込んで、直接結果をシートに取り込める。あとはExcelの世界なので、グラフ化したり他のデータと組み合わせて計算したりとか。ほら、いつもやってるやつでしょ?

ま、ここまででも充分やりたいことできると思うけど、もうちょっと複雑なことやりたいんだったら、お楽しみのプログラミング作成すればいい。楽しみたいからプログラム作るってのは本末顛倒なので、できるだけ簡単な手段で結果が出るのが理想なんだけどね。

  job_data = {
     'configuration' => {
      'extract' => {
       'sourceTable' => {
        'projectId' => '...',
        'datasetId' => '...',

てな感じでジョブの対象とかを指定して、

  bigquery = client.discovered_api('bigquery', 'v2')

BigQuery使いまっせと宣言して、

  result = client.execute(
    :api_method => bigquery.jobs.insert,
    :parameters => {

APIを呼ぶ。このプログラム組むあたりで、妄想が色々と膨らむと思う。なぜかっていうと、このclient.discovered_api('bigquery''v2')ってやつね。これ見てわかる通り、こいつはBigQuery専用ってわけじゃく、Googleのサービス全般を同じように使えるようになっている。

同じように使えるサービスを見ていると、なんかそういうことだよな。って思ってくる。ね?Googleのクラウドって、独特だよな。って気分わかるでしょ?

こまかいことをウダウダ説明したいんじゃなくて、こうしてどデカイデータだろうが、シンプルにデータを抜き出してしまえば、話はどんどん簡単になるってこと。環境構築もいらないし、必要なデータにまとめられれば、後はExcelでもいいし、手元でちょっとプログラム組んでもいいし。

最近あっちこっちでビッグデータ時代というキャッチが踊ってるけど、そんな中身のないキャッチに踊らされて不必要な出費してる場合じゃなくて、やれることを一歩一歩やっていけばいいのであって、そうやって努力する人は、劇的なコスト削減とか、劇的な速度改善というご褒美があって。そういうことやらずにコンサルとかベンダーとかに任せてしまう人は、驚くような請求されて、なんだかなー。な、時代なわけですよ。

0 件のコメント:

コメントを投稿